2016-02-27 146 views
0

下面是简要什么的BeanFactoryPostProcessor确实BeanFactoryPostProcessor修改实际的bean定义而不是实例?

BeanFactoryPostProcessor的,可以修改实际的bean定义 而不是实例的,因为它的created.Spring IoC容器 允许BeanFactoryPostProcessor读取配置元数据,并 之前可能修改它容器实际上已经实例化了任何bean的 。 PropertyPlaceholderConfigurer是 BeanFactoryPostProcessor的例子来外部的一些属性值到 在Java属性格式的另一个单独的文件

我从上面明白是的BeanFactoryPostProcessor modies bean定义的应用程序上下文的开始(即同时applocation负载) 。 但我没有得到它改变了文件或内存中物理类的定义。

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

+0

我认为类的定义和bean定义是不同的东西的XML等价物。 –

回答

0

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

+0

所以这意味着beanfactorypostprocessor更改内存中的bean定义而不是物理文件? – emilly

+0

这是正确的。 – prabugp

0

一个BeanFactoryPostProcessor可以改变/添加的BeanDefinition

一个的BeanDefinition只是描述一个bean元数据:

  • bean的
  • 的类实例化
  • 属性的名称注入
  • 相关性
  • ...

<bean id=".." class=".."/>标签