Spring扩展功能之BeanFactoryPostProcessor

前面我们学习了Spring注解版的声明式事务和Aop功能的开发及相关源码解读,其实不然,Spring还有一块核心的知识拓展功能,这里包括了beanFactoryPostProcessor【beanFactory的后置处理器】、BeanDefinitionRegistryPostProcessor【bean定义注册的后置处理器】以及ApplicationListener【事件监听和发布】等,本节我们先来学习beanFactoryPostProcessor

beanFactoryPostProcessor和BeanPostProcessor
  • BeanPostProcessor

是bean的后置处理器,在bean创建对象初始化前后拦截进行工作

  • BeanFactoryPostProcessor

beanFactory类型的后置处理器,按照官方的解释:在beanFactory标准初始化之后来定制修改BeanFactory的内容:此时所有bean的定义被加载进beanFactory中,但是bean的实例未完成创建

demo

-1. 自定义MyBeanFactoryPostProcessor并实现BeanFactoryPostProcessor接口

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
    System.out.println("MyBeanFactoryPostProcessor ....postProcessBeanFactory ");
    //当前已经完成初始化的beanFactory
    int count = configurableListableBeanFactory.getBeanDefinitionCount();
    System.out.println("当前beanFactory中有:"+count+"个bean的定义信息,分别是如下:");
    String[] names = configurableListableBeanFactory.getBeanDefinitionNames();
    System.out.println(Arrays.asList(names));

}

注意一点别忘了添加注解Component【其主要的目的是标记为一个组件】

  • 2 配置类
@Configuration
@ComponentScan(value = "com.cacmp.bean.expand")
public class ExpandConfig {


@Bean
public Car car(){
    return new Car();
}
  • 3.来看测试类
 //Spring拓展BeanFactoryPostProcessor的测试
@Test
public void testExpand(){
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExpandConfig.class);
applicationContext.close();
}

测试结果如下图所示:

image.png

可以在上述的截图中找到我们自己的定义的在beanFactory中的bean,那么关于BeanFactoryPostProcessor简单的案例就到这里,在后续我们来深入学习其相关源码知识

你可能感兴趣的:(Spring扩展功能之BeanFactoryPostProcessor)