BeanFactoryPostProcessor修改实际的bean定义而不是实例?

时间:2016-02-27 11:13:01

标签: java spring

以下是BeanFactoryPostProcessor的简要介绍

  

BeanFactoryPostProcessor允许您修改实际的bean定义   而不是它创建的实例.Spring IoC容器将   允许BeanFactoryPostProcessors读取配置元数据和   在容器实际实例化之前可能会更改它   任何豆子。 PropertyPlaceholderConfigurer就是一个例子   BeanFactoryPostProcessors将一些属性值外部化   Java Properties格式的另一个单独文件

我从上面了解到,BeanFactoryPostProcessor在应用程序上下文的开头修改bean定义(即applocation加载时)。 但我没有得到它在文件或内存中物理更改类定义。

我正在我的项目中使用PropertyPlaceholderConfigurer。为了验证它,一旦应用程序启动,我去了类路径并在反编译器中打开类文件 属性{test.property}是否被实际值替换。不是。那么spring会修改内存中的类定义吗?

2 个答案:

答案 0 :(得分:1)

BeanFactoryPostProcessor不会更改物理类定义。在生产中的大多数应用程序中,运行应用程序的用户甚至无法访问“写入”。到文件。加载类后,所有修改都会发生。因此,当您需要一个bean实例时,Spring将加载bean定义(但不会实例化任何'实例),应用已注册的bean工厂后处理器,然后创建一个实例(然后应用bean post处理器,它与bean factory post处理器不同)然后只返回bean。

答案 1 :(得分:0)

BeanFactoryPostProcessor可以更改/添加 BeanDefinition

BeanDefinition只是描述bean的元数据:

  • bean的名称
  • 实施课程
  • 要注入的属性
  • 依赖关系
  • ...

它是<bean id=".." class=".."/>标记

的xml中的等价物
相关问题