SpringBoot源码透彻解析—bean生命周期

先跟一段debug再看总结:

SpringBoot源码透彻解析—bean生命周期_第1张图片
SpringBoot源码透彻解析—bean生命周期_第2张图片
SpringBoot源码透彻解析—bean生命周期_第3张图片
SpringBoot源码透彻解析—bean生命周期_第4张图片
SpringBoot源码透彻解析—bean生命周期_第5张图片
SpringBoot源码透彻解析—bean生命周期_第6张图片
SpringBoot源码透彻解析—bean生命周期_第7张图片
SpringBoot源码透彻解析—bean生命周期_第8张图片
SpringBoot源码透彻解析—bean生命周期_第9张图片
SpringBoot源码透彻解析—bean生命周期_第10张图片

1 创建实例

  1. InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(自定义一个对象或者代理对象)
  2. createBeanInstance(创建实例)
  3. MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition(发现属性:@Value和@Autowired注解)

2 填充属性

  1. InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation(实例化后置处理器,最后一次机会修改beanDefinitinon)
  2. InstantiationAwareBeanPostProcessor.postProcessProperties(填充属性1:@Value和@Autowired注解)
  3. applyPropertyValues(属性填充2:beanDefinition里的propertyValues有值时)

3 初始化

  1. invokeAwareMethods:回调aware接口,注入spirng核心组件或上下文对象
  2. BeanPostProcessor.postProcessBeforeInitialization: @PostConstruct方法调用
  3. invokeInitMethods: 初始化
  4. BeanPostProcessor.postProcessAfterInitialization: 代理对象创建(AOP核心)

① 3-5:是一对,一个探测,一个填充;

AutowiredAnnotationBeanPostProcessor 针对的是@Value和@Autowired属性的探测和填充;
CommonAnnotationBeanPostProcessor 针对的是@Resource和@PostConstruct属性的探测和填充
探测都是同一个方法,但是,@Resource属性的填充是CommonAnnotationBeanPostProcessor.postProcessProperties

② @PostConstruct方法的调用是:CommonAnnotationBeanPostProcessor.postProcessBeforeInitialization)
③ 9:bean实现InitializingBean接口,回调afterPropertiesSet方法。
④ 10:AnnotationAwareAspectJAutoProxyCreator 创建代理对象。

你可能感兴趣的:(spring,boot,java,spring)