Spring Bean工厂后置处理器

1 是什么

是一种干预Bean工厂(DefaultListableBeanFactory)初始化过程的处理器,Bean工厂的初始化包括Bean工厂的属性设置,以及每一个Bean对应的BeanDefinition对象的实例化和初始化,代理的完成等等。

2 两个顶级接口

2.1 BeanFactoryPostProcessor

只有一个方法:

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

一般来说扩展Spring的话只要实现BeanFactoryPostProcessor就可以了,
获取获取到BeanFactory对象,在Spring容器初始化的过程中向BeanFactory中添加,删除,修改Bean。

该接口实现类执行时机:
在扫描之后,Bean实例化之前执行。Spring容器在初始化过程中会调用实现了BeanDefinitionRegistryPostProcessor接口实现类之后,再去调用实现BeanFactoryPostProcessor接口实现类。

当存在多个BeanFactoryPostProcessor实现类时,他们之间postProcessBeanFactory()方法的调用顺序是:
1.先调用
容器.addBeanFactoryPostProcessor()添加的BeanFactoryPostProcessor
实现类
2.再调用实现了PriorityOrdered接口的BeanFactoryPostProcessor实现类
3.再调用实现了Ordered接口的BeanFactoryPostProcessor实现类
4.最后调用其他的BeanFactoryPostProcessor实现类

2.2 BeanDefinitionRegistryPostProcessor

BeanFactoryPostProcessor接口的增强,添加了另外一个方法:

void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;

一般不会利用该接口对spring进行扩展,除非想要在完成扫描之前完成某些功能。

该接口实现类执行时机:
和扫描同阶段执行,Spring容器在初始化过程中会先调用实现了BeanDefinitionRegistryPostProcessor接口实现类。
当存在多个BeanDefinitionRegistryPostProcessor实现类时,他们之间postProcessBeanDefinitionRegistry()方法的调用顺序是:
1.先调用
容器.addBeanFactoryPostProcessor()添加的BeanDefinitionRegistryPostProcessor
实现类
2.再调用实现了PriorityOrdered接口的BeanDefinitionRegistryPostProcessor实现类
3.再调用实现了Ordered接口的BeanDefinitionRegistryPostProcessor实现类
4.最后调用其他的BeanDefinitionRegistryPostProcessor实现类
postProcessBeanDefinitionRegistry()调用完之后
调用之前调用过的BeanDefinitionRegistryPostProcessor实现类的**postProcessBeanFactory()**方法

3 Spring内部Bean工厂后置处理器的实现

3.1 ConfigurationClassPostProcessor

spring最重要的Bean工厂处理器,实现了BeanDefinitionRegistryPostProcessor接口。

在postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)方法中完成解析和扫描,将Bean添加到BeanFactory中。
扫描处理的注解有:
@ComponentScan
@Import
@ImportResource
@Bean

在postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)方法完成了三件事:
1.对postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)的补充,判断未完成扫描的话完成扫描
2.完成对加了
@Configuration
注解进行cglib代理,生成对应的class对象
3.添加了工厂后置处理器(ImportAwareBeanPostProcessor)

3.2 EventListenerMethodProcessor

实现了BeanFactoryPostProcessor接口。
处理时间监听器Bean工厂后置处理器,找出了所有EventListenerFactory实现类并进行排序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值