1.8.2 Customizing Configuration Metadata with a BeanFactoryPostProcessor

使用 BeanFactoryPostProcessor 来定制化配置元数据 (包含了 Bean 的定义)

BeanFactoryPostProcessor 操作的是 bean 的配置元数据,而不是 bean 实例对象,Spring IoC 容器允许 BeanFactoryPostProcessor 读取配置元数据并且有可能会在实例化任何 bean (除了它本身)之前改变这些 bean 的定义。

可以配置多个 BeanFactoryPostProcessor 实例, 并且通过实现 Ordered 接口,设置 order 属性来设置这些实例应用的顺序。

While it is technically possible to work with bean instances within a BeanFactoryPostProcessor (for example, by using BeanFactory.getBean()), doing so causes premature bean instantiation, violating the standard container lifecycle. This may cause negative side effects, such as bypassing bean post processing.

虽然在 BeanFactoryPostProcessor 中可以通过 BeanFactory.getBean() 获取 bean 实例,然后对其操作,但是这回导致 bean 的预实例化,违反了标准的容器生命周期。这可能带来一些副作用,如绕过 bean 的后置处理。

Implementation Example:

PropertySourcesPlaceholderConfigurer : 实现 bean 属性的值,可以定义在外部 properties 文件中

PropertyOverrideConfigurer : 事项 bean 的属性如果没有值的话,可以通过外部 properties 文件定义一个默认值

1
PropertySource