1、在spring刷新容器加载BeanFactory,完成初始化回调
1、加载BeanFactory会初始化org.springframework.beans.factory.support.DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory,这个父类就是生命周期的核心,实例化、初始化、前后增强以及销毁Bean,覆盖了整个生命周期。
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactoryimplements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable
1、加载容器BeanFacotry
org.springframework.context.support.AbstractApplicationContext#obtainFreshBeanFactory==>
org.springframework.context.support.AbstractRefreshableApplicationContext#refreshBeanFactory
2、spring刷新容器正式调用初始化的地方。
org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitialization
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean
核心类:
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
1、Bean实例化。
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#createBeanInstance
2、填充Bean属性值。
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean
3、拦截并且调用Aware方法。
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeAwareMethods
4、初始化前置增强处理。aop前置增强
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsBeforeInitialization
5、完成初始化init-methods,包括完成属性级别的回调(afterPropertiesSet)和自定义nit-methods的初始化。
org.springframework.beans.factory.InitializingBean#afterPropertiesSet
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#invokeCustomInitMethod
6、初始化后置增强处理。aop后置增强
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
7、注册销毁的Bean,如果是单例,通过DestructionAwareBeanPostProcessors来销毁bean,如果不是单例,则使用回调来销毁bean。
org.springframework.beans.factory.support.AbstractBeanFactory#registerDisposableBeanIfNecessary