BeanPostProcessor:Bean的后置处理器(处理的对象是Bean),可以在spring容器实例化bean之后,在执行bean的初始化方法前后,添加一些自己的处理逻辑。

BeanFactoryPostProcessor:BeanFactory的后置处理器(处理的对象是BeanFactory),是在spring容器加载了bean的定义文件之后,在bean实例化之前执行的,可以从BeanFactory中获取到bean创建之前的定义信息。

BeanDefinitionRegistryPostProcessor:实现这个接口,可以在BeanFactoryPostProcessor之前执行,bean初始化之前做一些bean定义的处理。

BeanDefinitionRegistryPostProcessor继承BeanFactoryPostProcessor,底层是先执行BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry方法之后,再执行实现BeanFactoryPostProcessor的postProcessBeanFactory方法,其实就是先定义再初始化的流程。

BeanPostProcessor

是一个后置处理器,作用是在bean创建之后的初始化过程执行之前和之后,进行前置处理和后置处理对bean的初始化的增强。所有bean在初始化的前后都会去执行一次前置和后置的处理,在具体的处理里面,会去循环遍历拿到bean对应的后置处理器,然后根据对应的后置处理器去执行一些增强方法,比如bean实现了ApplicationContextAware接口的话,后置处理器会去判断是否实现了这个接口,实现了就将ApplicationContext这个IOC容器作为属性设置进这个bean中,相当于让这个bean拥有了可以调用IOC容器的功能,其他的功能类似,所以后置处理器是spring的核心。
例如:
@Autowired是通过AutowiredAnnotationBeanPostProcessor这个后置处理器来实现的。
实现方式:
实现BeanPostProcessor接口,重写postProcessBeforeInitialization和postProcessAfterInitialization即可。