Spring生命周期扩展点

359 阅读1分钟

1.第一次bean的后置处理器:解决循环依赖(提前生成代理对象)

SmartInstantiationAwareBeanPostProcessor.getEarlyBeanReference

2.第二次bean的后置处理器:实例化前

InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation

3.第三次bean的后置处理器:推断构造函数

SmartInstantiationAwareBeanPostProcessor.determineCandidateConstructors

4.第四次调用bean的后置处理器:构建所有的注入点 @Autowired。。

MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition

5.第五次调用bean的后置处理器:实例化后

InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation   

6:第六次调用bean的后置处理器:填充属性

InstantiationAwareBeanPostProcessor.postProcessPropertyValues

7.invokeAwareMethods:调用Aware扩展点

BeanNameAware.setBeanName(beanName);

BeanClassLoaderAware.setBeanClassLoader(getBeanClassLoader());

BeanFactoryAware.setBeanFactory(AbstractAutowireCapableBeanFactory.this);

8.第七次调用bean的后置处理器:初始化前

BeanPostProcessor.postProcessBeforeInitialization(result, beanName);

   1.ApplicationContextAwareProcessor.postProcessBeforeInitialization--负责处理剩余的Aware

   2.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization--负责处理@PostConstruct@PreDestroy

9.invokeInitMethods:初始化

  1.InitializingBean.afterPropertiesSet();
  
  2.initMethod.invoke(bean);

10.第八次调用bean的后置处理器:初始化后

  BeanPostProcessor.postProcessAfterInitialization(result, beanName);