2016-04-01 40 views
1

我對傳統代碼(它是Spring應用程序)進行了分析,發現在Spring上下文中初始化了PropertySourcesPlaceholderConfigurerPropertyPlaceholderConfigurer。我知道在Spring上下文中只應該存在一個PropertyPlaceholderConfigurer的實例。我的問題是這個規則是否適用於PropertySourcesPlaceholderConfigurerPropertyPlaceholderConfigurer。將它們都放到上下文中是否是錯誤的?PropertySourcesPlaceholderConfigurer和PropertyPlaceholderConfigurer

回答

2

可以註冊多個屬性配置。但是,如果兩個PlaceholderConfigurer都引用同一組屬性,那麼它的錯誤配置應該避免。

否則,註冊多個PlaceholderConfigurer時,重要的是正確指定bean的順序。所以spring可以爲佔位符解決正確的值。

你可以在這裏找到一個很好的閱讀。

Spring Properties

+0

感謝您的回覆。其實我的問題與自動裝配(@Value)在春季Web應用程序(春季MVC)。我有屬性文件和兩個PPC(在問題中提到)在父上下文中。然而,在我的孩子上下文中,我不能使用(@Value)自動裝載屬性,我認爲問題出在這裏。我在子上下文中定義了另一個PPC,但我想重用在父上下文中定義的PPC。在你的引用(第8點)中描述了父子上下文之間的依賴關係。但是,我發現了一個缺陷,描述了爲什麼會發生這種情況https://jira.spring.io/browse/SPR-8994 – mvb13

0

PropertySourcesPlaceholderConfigurer是通過採取環境和PropertySource機制也在春3.1提供的優勢更加靈活。

PropertyPlaceholderConfigurer仍然是適當時使用:

  1. 彈簧上下文模塊不可用(即,一種是使用Spring的BeanFactory的API而不是ApplicationContext中)。
  2. 現有配置使用「systemPropertiesMode」和/或「systemPropertiesModeName」屬性。鼓勵用戶擺脫使用這些設置,而是通過容器的環境配置屬性源搜索順序;然而,通過繼續使用PropertyPlaceholderConfigurer可以保持功能的確切保存。

PropertySourcesPlaceholderConfigurer此類設計在春季3.1應用程序PropertyPlaceholderConfigurer一般更換。默認情況下,它使用property-placeholder元素來支持spring-context-3.1 XSD,而spring-context版本< = 3.0默認爲PropertyPlaceholderConfigurer,以確保向後兼容。

相關問題