从Bean被初始化加载开始,
首先实例化bean
调用AbstractAitowireCapableBeanFactory的createBeanInstance去实例化bean 注意:此时只是实例化,并没有进行@Autowire属性的填充
填充bean的属性
- 初始化bean
调用invokeAwareMethods方法
- 如果实现beanNameAware接口,调用setBeanNameAware方法
- 如果实现beanClassLoaderAware接口,调用setBeanClassLoader方法
- 如果实现beanFactoryAware接口,调用setBeanFactory方法。
调用applyBeanPostProcessorsBeforeInitization方法
- 循环调用BeanPostProcessor接口的postProcessBeanInitialization
由于Spring自带ApplicationContextAwareProcessor,会优先执行ApplicationContextAwareProcessor的postProcessBeanInitialization
- 执行ApplicationContextAwareProcessor的时候,会看bean有没有实现ApplicationContextAware接口,有则执行setApplicationContext方法
调用invokeInitMethod方法
- 实现InitializationBean接口,调用AfterPropertiesSet方法
- 指定init-method方法
调用applybeanPostProcessorAfterInitialization方法
- 循环调用实现了BeanPostProcessor接口的postProcessAfterInitialization方法。