BeanFactoryPostProcessor接口
对BeanFactory进行后置方法调用
触发时间:
ApplicationPreparedEvent 上下文准备完成后
refreshContext()方法中调用 invokeBeanFactoryPostProcessors(beanFactory)
BeanFactoryPostProcessor接口会被分组成
BeanDefinitionRegistryPostProcessor 注册器和 BeanFactoryPostProcessor 规则处理器
BeanDefinitionRegistryPostProcessor : 注册器:
SharedMetadataReaderFactoryContextInitializer
ConfigurationWarningsApplicationContextInitializer
ConfigurationClassPostProcessor(重点)
BeanFactoryPostProcessor 规则处理器:
ConfigFileApplicationListener # PropertySourceOrderingPostProcessor
先执行注册器的调用。
第一次调用注册器注册方法。
主要是 ConfigurationClassPostProcessor 类
调用 postProcessBeanDefinitionRegistry()方法,进行bean定义的扫描,注册到BeanFactory中
1、使用启动类作为入口
2、进行类扫描器扫描所有配置类 (只要有@Configuration、@Component、@ComponentScan、@Import、
@ImportResource和@Bean中的其中一个注解,就会将bean注册到beanfactory中)
第二次调用注册器方法
已经执行过的注册器不会再次执行
这里执行的注册器是从加载的配置类中获取的bean配置类。 BeanFactory中获取到类型为BeanDefinitionRegistryPostProcessor 的bean
执行bean注册工作。
比如在这里进行 mybatis的dao接口bean定义扫描注册到beanfactory中。
第三次:最后一次将为调用过的注册器进行调用。(这里一般没有)
规则处理器方法调用
BeanFactoryPostProcessor.postProcessBeanFactory()
SpringBoot扩展接口- BeanFactoryPostProcessor后置处理器
原文:https://www.cnblogs.com/gne-hwz/p/15294630.html