spring的后置处理器
spring供给了三种后置处理器
BeanFactoryPostProcessor
BeanPostProcessor
-
InitializingBean
咱们来依次看每个后置处理器的履行流程。
BeanFactoryPostProcessor
首要仍是回到refresh办法中,咱们能够看到在创立一般bean方针的上面有个办法叫invokeBeanFactoryPostProcessor,从办法名就能够看出是履行BeanFactoryPostProcessor办法


PriorityOrdered
接口的方针排序后履行


PriorityOrdered
接口后再拿出完结了Order
接口的方针履行


BeanDefinitionRegistryPostProcessor
的办法postProcessBeanDefinitionRegistry
,三个判别完毕之后最终履行BeanFactoryPostProcessor
的postProcessBeanFactory
办法
流程图如下

工厂后置增强的实际用途
咱们现在知道了spring供给了一些工厂的后置处理器来增强工厂,那么咱们现在来看看spring中实际使用工厂后置处理器做了什么事情,咱们来看一个类ConfigurationClassPostProcessor

@Configuratioin
注解的类


@Conditional
注解的方针会判别条件是否收效


BeanPostProcessor 注册
工厂的增强至此就完毕了,接下来看看一般组件的后置处理器的逻辑,仍是回到refresh办法,这次是调用registerBeanPostProcessors
办法,注册后置处理器。




InstantiationAwareBeanPostProcessor
一切的BeanPostProcessor都被注册之后,咱们来看其间一个分支:InstantiationAwareBeanPostProcessor
的流程
SmartInstantiationAwareBeanPostProcessor

智能的
实例后置处理器,那么这个咱们就来看看智能在什么地方. 在refresh办法中调用了一个注册监听器的办法

依据类型获取称号列表
的办法,该办法是ListableBeanFactory
接口的一个办法





InstantiationAwareBeanPostProcessor

postProcessBeforeInstantiation
办法测验回来方针,假如用户回来了则会用用户创立的方针。



MergedBeanDefinitionPostProcessor
在创立好bean实例方针之后会调用一下MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition办法让用户界说一下BeanDefinition

PopulateBean
之后就进入特点赋值办法,首要会先履行 InstantiationAwareBeanPostProcessor
的 postProcessAfterInstantiation办法,回来bool类型的值,假如回来true则会持续特点赋值,回来false则不会特点赋值

InstantiationAwareBeanPostProcessor
的 postProcessProperties办法。主动注入 AutowiredAnnotationBeanPostProcessor
的该办法就完结了主动注入的特点赋值

PropertyValues
在上面咱们能够看到postProcessProperties办法回来了一个pvs,咱们也能够自界说回来pvs,spring最终会帮咱们注入到方针中,创立一个PVS回来即可

BeanPostProcessor
特点赋值之后spring会履行initializeBean
办法初始化bean,首要会先履行一些 Aware
的注入