Spring BeanFactoryPostProcessor 和 BeanPostProcessor有什么用?

BeanFactoryPostProcessorBeanPostProcessor 都是 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 定义。
  • 关键方法:

    • 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>
      
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值