Spring源码之 BeanPostProcessor 和 InstantiationAwareBeanPostProcessor

文章目录

  • 两种后置处理的作用
    • BeanPostProcessor
    • InstantiationAwareBeanPostProcessor
    • 源码中IOC实例化过程的相关调用
      • applyBeanPostProcessorsBeforeInstantiation;
        • 调用实例
        • 代码图示
        • 调用链
      • applyBeanPostProcessorsBeforeInitialization;
        • 调用实例
        • 代码图示
        • 调用链

两种后置处理的作用

BeanPostProcessor和InstantiationAwareBeanPostProcessor
的区别。

BeanPostProcessor

定义了两个方法,分别用于初始化方法前后执行

postProcessBeforeInitialization

postProcessAfterInitialization

InstantiationAwareBeanPostProcessor

InstantiationAwareBeanPostProcessor extends BeanPostProcessor

新增下面两个方法,分别用于创建实例前后执行

postProcessBeforeInstantiation

postProcessAfterInstantiation

源码中IOC实例化过程的相关调用

applyBeanPostProcessorsBeforeInstantiation;

调用实例

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
#applyBeanPostProcessorsBeforeInstantiation

代码图示

下图为spring ioc中的使用实例
Bean创建后进行初始化的方法 initializeBean
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
#initializeBean(beanName,bean, RootBeanDefinition)
Spring源码之 BeanPostProcessor 和 InstantiationAwareBeanPostProcessor_第1张图片

调用链

getBean->
doGetBen->
getSingleton->
createBean->
resolveBeforeInstantiation->
applyBeanPostProcessorsBeforeInstantiation->
postProcessBeforeInstantiation->

applyBeanPostProcessorsBeforeInitialization;

调用实例

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
#applyBeanPostProcessorsBeforeInitialization

代码图示

下图为spring ioc中的使用实例
Bean创建前进行的解析方法 resolveBeforeInstantiation
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#resolveBeforeInstantiation
此方法是实现AOP代理的关键。
Spring源码之 BeanPostProcessor 和 InstantiationAwareBeanPostProcessor_第2张图片

调用链

getBean->
doGetBen->
getSingleton->
createBean->
doCreateBean->
createBeanInstance->initializeBean->
applyBeanPostProcessorsBeforeInitialization->
postProcessBeforeInitialization

你可能感兴趣的:(Spring源码,开源框架,spring)