1.instantiate bean 对象实例化
2.populate properties 封装属性
3.如果Bean实现BeanNameAware执行 setBeanName
4.如果Bean实现BeanFactoryAware方法或ApplicationContextAware设置工厂setBeanFactory或上下文对象setApplicationContext.
5.如果存在类实现BeanPostProcessor(后处理Bean),执行postProcessIBeforeInitialization
6.如果Bean实现InitialzingBean执行afterPropertiesSet
7.调用自定义的init-method方法
8.如果存在类实现BeanPostProcessor(处理Bean),执行postProcessAfterInitiallization
9.执行业务处理
10.如果Bean实现DisposableBean执行destroy
11.调用自定义的destroy-method
对于bean的生命周期方法:
第三步与第四步是让Bean了解spring容器
第五步与第八步 可以针对指定的Bean进行功能增强,这时一般会使用动态代理。
第六步与第十步:通过实现指定的接口来完成init与destroy操作。
但是在开发中一般不使用第六步与第十步,原因是我们可以使用第七步与第十一步来完成。第七步与第十一步的初始化与销毁操作它无耦合,推荐使用的。但是必须在配置文件中指定初始化与销毁的方法。
总结:
对于bean的生命周期,我们需要关注的主要有两个方法:
1.增强bean的功能可以使用后处理Bean,BeanPostProcessor
2.如果需要初始化或销毁操作我们可以使用init-method destroy-method
注意:destroy-method只对scope=singleton有效果。