前言
这一节讲bean
1.初始spring

点projects

Framework是spring的基础
spring官网


这三个主流
2. 系统架构


3. 核心概念



4. Ioc入门案例


其中Dao就是我们原来管理数据库的,service就是业务层




这个代码很简单
要交给spring管理,首先要有一个配置文件

一开始这里的xml文件是没有spring配置的
我们得先导包才有spring配置

这样右键创建xml就有spring了

这样我们就可以拿文件去运行这个bean了,给两个实现类都配置一个bean,那么这个bean就是对象了

先创建容器,然后就可以在里面根据id获取对象了





5. DI入门案例

DI主要就是搞bean里面类的关系了
BookServiceImpl:
原:

现在:

现在我们开始写配置来得到这两个对象的关系
applicationContext.xml:
原:

现在:

BookServiceImpl:

现在业务层一个new都没有了





注意那个setBookDao这个方法是容器执行的

6. bean配置




而且ref那里都可以用其他人的别名


对于异常我们要会阅读,只需要阅读异常名就可以了


6.2 bean的作用范围
意思就是我们造的对象是单例的还是非单例的


这样就可以看出是单例的
如何造出非单例的呢
我们就要用scope属性了

可以看出默认是第二个属性,所以我们换一个




所以bean的作用范围就是控制bean的数量的
7. bean的实例化
7.1 构造方法



其实我们这个bean对象的创建,也是会调用对应实体类的构造方法的,而且就算构造方法是私有的,也是会调用的(映射)
但是构造方法有参时就会报错,所以spring调用的构造方法时无参的


对于spring的报错信息,我们拉到最后面,看最后的异常
如果这个不行,就倒着看上一个报错信息

init是构造方法,这个就表示无参的构造方法

这个就是倒数第二个报错


7.2 静态工厂

这里是一个工厂方法,使用它就可以创建出来


这种方式该怎么交给spring管理呢

这样就可以了


这样我们就是通过静态工厂里面的静态方法来实例化bean了

7.3 实例工厂
意思就是工厂里面的方法不是静态的

我们先来表演一下普通的运行



<bean id="bookFactory" class="com.itheima.factory.BookDaoFactory"/>
<bean id="bookDao" factory-bean="bookFactory" factory-method="getBookDao"/>



我们这个的缺点就是造了一个多余的bean

现在我们开始改造
我们定义一个新的类BookDaoFactoryBean
然后重写方法,继承泛型接口

这样我们的配置就变简单了

我们只需要这样写就可以拿到bean了,而不是工厂对象




我们这个是单例的,
怎么改非单例呢
我们只需要增加一个重写方法就可

多的这个方法只需要返回false就是非单例的了



8. bean的生命周期

一共两个阶段,一个是bean创建以后,一个是消亡之前

现在开始配置,不然不可能平白无故就运行了



这里便发现了,destroy没有执行
为什么呢
因为程序执行完了,虚拟机退出了,没有给bean销毁的机会
怎么实现销毁呢,就是在程序结束之前,把这个容器给关闭了

但是没有这个方法
这是因为ApplicationContext这个接口,不具有这个close方法
而ClassPathXmlApplicationContext是ApplicationContext的一个实现类,它有close方法,这里有很多重继承,所以暂时还不能用
所以改一下类就可以了

这样就可以了
这个直接关闭的方式比较暴力,我们可以设置关闭钩子,就是告诉虚拟机,你自己退出前关闭一下
ctx.registerShutdownHook();
加上这句话就可以了


close关闭比较暴力,所以我们一般用关闭钩子
因为万一close之后还有执行相应代码呢
下面还有一个对生命周期操作的方法,就是按照spring的套路来
BookServiceImpl:
原:


就是对应继承接口,然后实现方法就可以了



这样的话就算我们执行dao的代码,也会加载service的,因为都是加载那个配置文件,那么就会加载service的,那么自动执行那两个方法,那么就会打印,但是还是得要关闭钩子,不然也看不见


这样我们就知道了
afterPropertiesSet这个方法是在我们属性设置完之后才执行的



看这个我们就知道了为什么afterPropertiesSet在后面执行了

总结
下一节讲依赖注入



















