2016-02-27 145 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=".."/>標籤