一、三者的执行顺序
BeanDefinitionRegistryPostProcessor接口
唯一方法:BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry
作用:所有常规bd已经加载完毕,然后可以再添加一些额外的bd。
执行顺序:三个中最先执行的
比如下面几个都是Spring自己定义的,都是对BeanDefinitionRegistryPostProcessor接口的实现
- ConfigurationClassPostProcessor -----处理@Configuration注解
注意:BeanDefinitionRegistryPostProcessor接口继承了BeanFactoryPostProcessor接口。官网的建议是BeanDefinitionRegistryPostProcessor用来添加额外的bd。
BeanFactoryPostProcessor接口
唯一方法:BeanFactoryPostProcessor#postProcessBeanFactory
作用:Bean实例化之前执行,所有的bd已经全部加载完毕,然后可以对这些bd做一些属性的修改或者添加工作。
执行时间:BeanFactoryPostProcessor是在spring容器加载了bean的定义文件之后,在Bean实例化之前执行
官网的建议是BeanDefinitionRegistryPostProcessor用来添加额外的bd,而BeanFactoryPostProcessor用来修改bd
Spring允许BeanFactoryPostProcessor在容器实例化任何其它Bean之前读取配置元数据,并可以根据需要进行修改
spring中,有内置的一些BeanFactoryPostProcessor实现类,常用的有:
- org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
- org.springframework.beans.factory.config.PropertyOverrideConfigurer
- org.springframework.beans.factory.config.CustomEditorConfigurer:用来注册自定义的属性编辑器
BeanPostProcessor
作用:针对Bean实例化之后做一些逻辑处理
执行顺序:spring容器加载了Bean的定义并且实例化bean之后执行的。BeanPostProcessor的执行顺序是在BeanFactoryPostProcessor之后
spring中,有内置的一些BeanPostProcessor实现类,例如:
- org.springframework.context.annotation.CommonAnnotationBeanPostProcessor:支持@Resource注解的注入
- org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor:支持@Required注解的注入
- org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor:支持@Autowired注解的注入
- org.springframework.orm.jpa.support.PersistenceAnnotatio

本文详细介绍了Spring中BeanDefinitionRegistryPostProcessor、BeanFactoryPostProcessor和BeanPostProcessor三个接口的执行顺序及其作用。BeanDefinitionRegistryPostProcessor用于添加额外的Bean定义,BeanFactoryPostProcessor则用于在Bean实例化前修改Bean定义,而BeanPostProcessor则在Bean实例化后执行,用于进一步处理Bean实例。在Spring启动过程中,这三个接口的执行顺序为:BeanDefinitionRegistryPostProcessor -> BeanFactoryPostProcessor -> BeanPostProcessor。在Bean实例化时,BeanPostProcessor的before和after初始化方法会在Bean构造方法和初始化方法之间调用。
最低0.47元/天 解锁文章
1609

被折叠的 条评论
为什么被折叠?



