2009-11-16 21 views

回答

0

您是否設法通過使用屬性語法顯式注入bean定義文件中的值來實現它的工作?從理論上講,如果有效,那麼你應該可以在@Value中使用相同的表達式。對於這個問題,你應該可以使用@Autowired @Qualifier

0

我不認爲有可能通過使用SPEL在@Value註釋中訪問由PropertyPlaceHolderConfigurer加載的屬性。這將是巨大的,但據我所知,未來最好的事情是聲明:

<util:properties id="props" location="classpath:xxx/yyy/app.props"/> 

它可以指向相同的屬性文件作爲PropertyPlaceHolderConfigurer

+1

你可以也創建你自己的PropertyPlaceHolde rConfigurer公開其屬性。你可以在這裏找到一個例子:http://mortarproject.svn.sourceforge.net/viewvc/mortarproject/src/trunk/mortar-core/src/main/java/org/mortar/spring/beans/factory/config /EnhancedPropertyPlaceholderConfigurer.java?revision=70&view=markup您必須使用舊的而不是更新的註冊它,以便您可以設置一個id然後將其引用到您的值標籤爲@Value(#{xxx.properties ['foo.bar']}) – pakman 2011-03-18 23:50:31

+0

我不認爲你需要把xxx.properties文件名,彈簧加載所有的屬性文件,你只需要確保您的密鑰在所有屬性文件中都是唯一的。 – Ashish 2012-03-29 16:44:25

+0

這是不正確的。從Spring 3開始,您可以使用SPEL訪問PropertyPlaceHolderConfigurer值。 – 2014-04-08 17:31:00

15

老問題,但仍值得回答。您可以像使用原始PropertyPlaceholderConfigurer一樣使用表達式。

app.properties

app.value=Injected 

APP-context.xml中

<bean id="propertyConfigurer" class="MyPropertyPlaceholderConfigurer"> 
     <property name="location"> 
     <value>file:app.properties</value> 
     </property> 
    </bean> 

目標豆

@Value(value="${app.value}") 
    private String injected; 

測試這種方法使用Spring 3.0.6

+0

額外的#{...}有點無用(它對靜態字符串進行了SpEL評估)。自Spring 3.x以來,$ {app.value}語法在@Value註釋中得到支持,並且可以用於注入屬性(但它可能不是在問這個問題時)。 – MikeN 2013-02-01 15:32:00

+0

您對額外的#{...}是正確的。您可以省略它,並且您將獲得相同的結果。我會糾正我的答案,擺脫它。 – micfra 2013-02-04 08:44:19

相關問題