目录
一.反转(转移)控制 (IOC)
控制:对于成员变量赋值的控制权
反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring工厂和配置文件中完成
好处:解耦合
底层实现:工厂设计模式
二.DI 依赖注入
我需要你,也就是依赖你,我就把你当做我的成员变量,继而通过spring的配置文件进行赋值,注入
三.bean的生命周期
方便理解
1.对象的生命周期
一个对象创建,存活,消亡的一个完整过程
2.为什么要学习生命周期
由Spring负责对象的创建、存活、销毁,了解生命周期,有利于我们使用好Spring为我们创建的对象
3.生命周期的三个阶段
(1)创建
Application ctx = new ClassPathXmlApplicationContext("/application.xml") ->创建对象
得到结果
上面的代码就相当于new对象,实现对象的构造方法
(2)初始化方法
Spring工厂在创建完对象后,调用对象的初始化方法,完成对应的初始化操作
Application ctx = new ClassPathXmlApplicationContext("/application.xml") ->创建对象,构造方法就会执行
1.初始化方法提供:程序员根据需求,提供初始化方法,最终完成初始化操作
2.初始化方法调用:Spring工厂进行调用
两种实现方法
- InitializingBean接口
这个方法
//程序员根据需求,实现的方法,完成初始化操作
public void afterPropertieSet()
{里面就写一些初始化操作}
使用该方法实现接口,完成初始化操作
- 提供一个普通方法 myInit
public void myInit()
{里面就写一些初始化操作}
<bean id="product" class="xxx.Product" init-method="myInit"/>
//要告诉spring,通过配置文件
细节问题
- 如果⼀个对象即实现InitializingBean 同时⼜提供的 普通的初始化⽅法
- 如果对象里有属性,需要set方法注入赋值。如果有注入的需求(DI),那到底是先注入呢还是先初始化呢?
答案是:先注入,后初始化,这也是为什么初始化方法叫做afterPropertieSet()
(3)销毁(资源释放的操作)
两种实现方法(和初始化的差不多)
- DisposableBean接口
public void destrot(){
}
- 自己定义
细节分析
销毁方法的操作只适用于scope=“singleton”
4.对象生命周期的总结
完整代码
5.后置处理Bean
1.介绍
BeanPostProcessor(是个接口)作用:对spring工厂创建的所有对象,进行再加工
在AOP底层实现中很重要!(可以看我的这一篇文章)
工厂创建对象的过程
引入BeanPostProcessor后,流程变为了
2.开发步骤
- 进行配置
想改变(加工)名字
- 类实现beanpostprocessor接口
- 配置文件(告知spring,我们自己写了一个方法,让spring帮我们创建对象)