一、BeanFactoryPostProcessor
后置处理器
BeanFactoryPostProcessor
是BeanFactory
的后置处理器,在BeanFactory
标准初始化之后调用,即所有的bean定义已经保存加载到BeanFactory
,但是bean的实例还没创建。它可以来定制和修改BeanFactory
的内容
创建一个自定义的BeanFactory
后置处理器MyBeanFactoryPostProcessor
,并实现BeanFactoryPostProcessor
接口
postProcessBeanFactory()
方法在bean创建之前被调用
二、源码分析
在创建容器执行refresh()
刷新容器时,会调用invokeBeanFactoryPostProcessors()
方法执行BeanFactoryPostProcessor
,它在初始化创建其他组件前面执行
invokeBeanFactoryPostProcessors()
方法进一步调用invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors())
获取到所有的BeanFactoryPostProcessor
保存在nonOrderedPostProcessors
列表中,或者根据所属类型保存在优先级列表priorityOrderedPostProcessors
、排序列表orderedPostProcessorNames
首先调用实现优先级排序的,其次调用实现排序的,最后调用其它的invokeBeanFactoryPostProcessors()
方法
遍历获取每一个BeanFactoryPostProcessor
回调自定义实现的postProcessBeanFactory()
方法
执行自定义的postProcessBeanFactory()
方法