简述
在spring中,有两个核心Processor接口:BeanPostProcessor和BeanFactoryPostProcessor
在spring boot中,有个核心Processor接口:EnvironmentPostProcessor
其实,Processor 没有什么原理,主要原理就是这个翻译上:处理机、加工机。
下面介绍一下 Spring 和 Spring Boot 中的核心 Processor 类的原理,帮助理解 Spring 的设计思路。
spring中的Processor
Spring 设计时考虑的设计模式的开闭原则,因此提供了大量的扩展接口,其中就有 BeanPostProcessor 和 BeanFactoryPostProcessor 。
- BeanPostProcessor : 对容器中的 Bean 进行后处理,增强 Bean 的功能,在bean初始化前后进行操作
- BeanFactoryPostProcessor :对 Spring 容器本身进行后处理,增强容器的功能
区别:
- BeanPostProcessor 执行顺序在 BeanFactoryPostProcessor 之后
- BeanPostProcessor 是 Spring 容器加载 Bean 的定义文件并且实例化 Bean 之后,在容器执行 InitializingBean 之前执行的。
- BeanFactoryPostProcessor 是 Spring 容器加载 Bean 的定义文件之后,在执行 Bean 实例化之前执行的。
BeanFactoryPostProcessor 流程图如下:
![](https://img.haomeiwen.com/i6913638/5737a057b783aebe.png)
Spring 容器加载 Bean 的定义文件执行 BeanFactoryPostProcessor执行 Bean 实例化
BeanPostProcessor 流程图如下
![](https://img.haomeiwen.com/i6913638/c01358320ed18ec2.png)
BeanPostProcessor【interface】,bean的后置处理器
public interface BeanPostProcessor {
/**
* 在bean初始化之前工作
* 生命周期:在任何 [初始化方法] 调用之前执行
*/
@Nullable // spring5 新特性,允许为空
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
/**
* 在bean初始化方法调用之后工作
*
*/
@Nullable // spring5 新特性,允许为空
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
网友评论