Spring Bean生命周期

Spring中bean的真正实例化动作是由AbstractBeanFactory的createBean方法定义的,但是该类中该方法定义为抽象方法,即实际初始化动作交由子类去实现。在Spring中实现该方法的类是AbstractAutowireCapableBeanFactory。在实例化一个Bean的过程中,Spring给我们预留了很多扩展点。

bean.png

上图中1-14均为初始化步骤,16-18均为销毁步骤

扩展点

  1. InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
    在1中可以通过实现该接口的该方法阻止Spring原生的初始化动作,只要该方法的返回值不为null,则接下来的初始化动作只剩14,该方法的返回值将被作为BeanPostProcessor#postProcessBeforeInitialization的bean入参
  2. MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
    在3中可以通过实现该接口的该方法修改运行时的BeanDefinition
  3. InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
    在4中可以通过实现该接口的该方法阻止Spring的bean属性注入动作,返回false即可
  4. InstantiationAwareBeanPostProcessor#postProcessProperties
    在4中可以通过实现该接口的该方法改写bean即将注入的属性值
  5. BeanPostProcessor#postProcessBeforeInitialization
    这时bean的属性值已经被填充好了,如果该方法返回值为null,则剩下的 BeanPostProcessor#postProcessBeforeInitialization不会被执行
  6. BeanPostProcessor#postProcessAfterInitialization
    这时bean的属性值已经被填充好了,如果该方法返回值为null,则剩下的 BeanPostProcessor#postProcessAfterInitialization不会被执行
  7. DestructionAwareBeanPostProcessor#postProcessBeforeDestruction
    在16中可以通过实现该接口的该方法完成bean销毁前的回调

你可能感兴趣的:(Spring Bean生命周期)