前面我们学习了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();
}
测试结果如下图所示:
可以在上述的截图中找到我们自己的定义的在beanFactory中的bean,那么关于BeanFactoryPostProcessor简单的案例就到这里,在后续我们来深入学习其相关源码知识