从Bean被初始化加载开始,

    1. 首先实例化bean

      调用AbstractAitowireCapableBeanFactory的createBeanInstance去实例化bean 注意:此时只是实例化,并没有进行@Autowire属性的填充

    2. 填充bean的属性

    3. 初始化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方法。