Spring扩展原理1_BeanFactoryPostProcessor

  1. Demo演示

BeanPostProcessor:Bean的后置处理器,bean创建对象初始化后进行拦截工作

BeanFactoryPostProcessor:beanFactory的后置处理器,在BeanFactory标准初始化(所有的beanDefinition已被保存加载到beanFactory,但是bean的实例还未被创建)之后调用

Demo演示

定义自己的BeanFactoryPostProcessor,并将它添加到容器中:

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("MyBeanFactoryPostProcessor...execute postProcessBeanFactory ...");
        String[] names = beanFactory.getBeanDefinitionNames();
        int count = beanFactory.getBeanDefinitionCount();
        System.out.println("当前beanFactory中有"+count+"个bean");
        System.out.println(Arrays.asList(names));
    }
}
@ComponentScan("com.study.ext")
@Configuration
public class ExtConfig {
    //随便加上几个以前写的组件,方便查看先后顺序
    @Bean
    public Blue blue(){
        return new Blue();
    }
    @Bean
    public Yellow Yellow(){
        return new Yellow();
    }
}
public class Blue {
    public Blue(){
        System.out.println("Blue constructor working...");
    }
}
//...Yellow与Blue同

测试:

public class Test_EXT {
    @Test
    public void test(){
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ExtConfig.class);
        context.close();
    }
}

证明BeanFactoryPostProcessor的方法postProcessBeanFactory被调用时,容器中只有BeanDefinition,Bean实例并未被创建。

  1. ioc容器创建对象
  2. invokeBeanFactoryPostProcessor( beanFactory ); 执行BeanPostProcessor

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 708801794@qq.com

文章标题:Spring扩展原理1_BeanFactoryPostProcessor

文章字数:246

本文作者:梅罢葛

发布时间:2020-04-08, 13:34:44

最后更新:2020-04-08, 15:21:49

原始链接:https://qiurungeng.github.io/2020/04/08/Spring%E6%89%A9%E5%B1%95%E5%8E%9F%E7%90%861-BeanFactoryPostProcessor/
目录
×

喜欢就点赞,疼爱就打赏