spring bean的生命周期

95 阅读1分钟

接口:InitializingBean、DisposableBean

得到RootBeanDefinition:getMergedLocalBeanDefinition

从BeanDefinition解析为Class:resolveBeanClass

执行实例化前和实例化后的处理器:resolveBeforeInstantiation

实例化:createBeanInstance

修改合并BeanDefinition的处理:postProcessMergedBeanDefinition

是否需要解决循环依赖:addSingletonFactory

属性赋值:populateBean

a、如果有实例化后处理器处理,直接返回bean
b、根据依赖注入的模式,添加属性
c、如果有属性处理,执行postProcessProperties(重要!!),注入bean
d、checkDependencies,做依赖检查
e、根据applyPropertyValues进行属性赋值

初始化bean:initializeBean

a、如果实现了Aware接口,执行回调方法:invokeAwareMethods
b、初始化前的处理:applyBeanPostProcessorsBeforeInitialization
c、执行invokeInitMethods,如果实现InitializingBean接口,执行afterPropertiesSet方法,还有自定义的init方法
d、初始化后的处理:applyBeanPostProcessorsAfterInitialization

是否需要解决循环依赖:getSingleton

对于一些实现了DisposableBean接口的bean,进行销毁后的处理registerDisposableBeanIfNecessary