Spring创建Bean的流程
- 获取bean。
AbstractBeanFactory#getBean-->AbstractBeanFactory#doGetBean-->DefaultSingletonBeanRegistry#getSingleton()
,从单例池中获取bean。 - 获取不到bean,进行创建。
DefaultSingletonBeanRegistry#getSingleton(String, ObjectFactory)-->AbstractAutowireCapableBeanFactory#createBean-->AbstractAutowireCapableBeanFactory#doCreateBean
。 - bean的属性赋值。
AbstractAutowireCapableBeanFactory#populateBean
。 - bean的初始化。
AbstractAutowireCapableBeanFactory#initializeBean()
。主要执行invokeAwareMethods
,applyBeanPostProcessorsBeforeInitialization
,invokeInitMethods
,applyBeanPostProcessorsAfterInitialization
。 - 补充:ApplicationContextAwareProcessor是一个bean的后置处理器,会执行
ApplicationContextAwareProcessor#invokeAwareInterfaces
。InitDestroyAnnotationBeanPostProcessor
会执行带有@PostConstruct
的方法。