Spring Bean的生命周期
1、spring会扫描指定包(@ComponentScan(“包路径”))下面的标有注解的类,解析类得到BeanDefinition对象。Spring是根据beanDefinition来创建Spring bean的。
2、实例化bean得到一个对象(如果有多个构造方法,则要判断是有哪个构造方法(constructor.newInstance()))
3、对对象中的加了@Autowired注解的属性进行属性填充
4、回调Aware方法,比如BeanNameAware,BeanFactoryAware
5、调用BeanPostProcessor的初始化前的方法
6、调用初始化方法
7、调用BeanPostProcessor的初始化后的方法,在这里会进行AOP
8、如果当前创建的bean是单例的则会把bean放入单例池
9、使用bean
10、Spring容器关闭时调用DisposableBean中destory()方法
Spring Bean的生命周期分为四个阶段和多个扩展点。扩展点又可以分为影响多个Bean和影响单个Bean。整理如下:
四个阶段
实例化 Instantiation
属性赋值 Populate
初始化 Initialization
销毁 Destruction
多个扩展点
影响多个Bean
BeanPostProcessor
postProcessBeforeInitialization
postProcessAfterInitialization
InstantiationAwareBeanPostProcessor
postProcessBeforeInstantiation
postProcessAfterInstantiation
postProcessPropertyValues
MergedBeanDefinitionPostProcessor
postProcessMergedBeanDefinition
SmartInstantiationAwareBeanPostProcessor
determineCandidateConstructors
getEarlyBeanReference
影响单个Bean
Aware
Aware Group1(调用invokeInitMethods方法)
BeanNameAware
BeanClassLoaderAware
BeanFactoryAware
Aware Group2(调用Aware和BeanPostProcessor# postProcessBeforeInitialization方法)
EnvironmentAware
EmbeddedValueResolverAware
ApplicationContextAware(ResourceLoaderAware\ApplicationEventPublisherAware\MessageSourceAware)
生命周期
InitializingBean
DisposableBean