BeanFactoryPostProcessor 和 BeanPostProcessor 都是 Spring 框架中非常重要的扩展点,我们在开发中可以利用 Spring 容器实例化 Bean、配置 Bean 以及初始化 Bean 的过程中进行自定义的干预。但它们的作用时机和作用对象不同。
1. BeanFactoryPostProcessor:
-
作用时机: 在 Spring 容器实例化Bean 之前 调用。更准确地说,是在 Spring 容器读取 Bean 定义信息之后, 在 Bean 实例化之前。
-
作用对象:
BeanFactory本身以及 Bean 定义 (BeanDefinition)。 -
主要用途:
- 修改 Bean 定义: 可以修改
BeanDefinition的属性,例如:- 修改 Bean 的类名
- 修改 Bean 的作用域 (scope)
- 修改 Bean 的属性值
- 添加或删除 Bean 的依赖关系
- 修改 Bean 的初始化方法和销毁方法
- 修改 Bean 的自动装配模式
- 等等
- 添加自定义的属性编辑器 (PropertyEditor): 可以注册自定义的
PropertyEditor,用于将字符串类型的配置值转换为 Bean 属性所需的类型。 - 读取外部配置: 可以读取外部配置文件(例如,properties 文件、YAML 文件、数据库等),并根据配置信息修改 Bean 定义。
- 修改 Bean 定义: 可以修改
-
关键方法:
postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory): 这是BeanFactoryPostProcessor接口中唯一的方法,它接收一个ConfigurableListableBeanFactory对象作为参数,允许你对BeanFactory进行修改。
-
常用实现类:
-
PropertyPlaceholderConfigurer: 用于属性占位符替换,可以将配置文件中的占位符(例如,${jdbc.url})替换为实际的值。<!-- Spring 2.5 及之前 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:database.properties"/> </bean>
-

最低0.47元/天 解锁文章
5237

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



