Spring中Bean的生命周期包含五个阶段:
实例化、依赖注入、初始化、使用、销毁
一、实例化: 当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚末初始化的依赖时,容器就会调用doCreateBean()方法进行实例化,实际上就是 通过反射的方式创建出一个bean对象
二、依赖注入: 给这个Bean对象进行属性填充,也就是注入这个Bean依赖的其它bean对象
三、初始化:
属性填充之后,会进行bean的初始化,初始化将会检测该bean是否实现三种Aware接口,BeanPostProcessor接口,InitializingBean接口并进行对应的操作:
1、三种Aware接口:ApplicationContextAware接口、BeanNameAware接口、BeanFactory接口,这些Aware类型的接口,可以让我们拿到Spring容器的些资源:BeanName、工厂对象BeanFactory等
1> 当bean实现ApplicationContextAware接口,Spring会调用setApplicationContext()方法,将bean所在应用上下文引用传入进来。
2>当bean实现了BeanNameAware接口,就必须实现BeanNameAware的setBeanName()方法,Spring会将Bean的Id传递给setBeanName()方法
3>当bean实现了BeanFactory接口,Spring会调用setBeanFactory方法,将BeanFactory容器实例传入
2、执行了Aware接口的方法之后,如果Bean实现了BeanPostProcessor接口(bean后置处理接口),那么将会先执行postProcessorBeforeInitialization()“后置处理在初始化之前”方法
3、判断Bean如果实现了InitializingBean接口,将会执行lnitializingBean的afeterPropertiesSet()初始化方法;
4、执行用户自定义的初始化方法,如init-method等;
5、如果第二步那里,Bean实现了BeanPostProcessor接口,那么在执行自定义初始化方法之后,将会执行postProcessorAfterInitalization()“后置处理在初始化之后”方法
四、使用
这个阶段讲bean保存到容器中可以被使用了,当Bean不再需要时,就会执行销毁阶段
五、销毁
会判断Bean是否实现了DisposableBean接口,或者配置了自定义的destroy-method等自定义的销毁方法,如果有的话,则会自动调用其配置的销毁方法;