Spring属性(属性占位符)自动assembly

我在我的applicationContext.xml

<context:property-placeholder location="classpath*:*.properties" /> <bean id="clientPreferencesManager" class="pl.bildpresse.bildchat2.business.ClientPreferencesManager" > <property name="clientApiUrl" value="${clientapi.url}" /> </bean> 

是否可以通过autowire来做同样的事情? 就像是 :

 @Autowired @Qualifier("${clientapi.url}") public void setClientApiUrl(String clientApiUrl) { this.clientApiUrl = clientApiUrl; } 

你可以使用@Value

 @Value("${clientapi.url}") public void setClientApiUrl(String clientApiUrl) { this.clientApiUrl = clientApiUrl; } 

我花了一些时间才明白为什么它不起作用。 我总是使用#而不是$ 。 我总是得到这个消息:

 EL1008E:(pos 0): Field or property 'secretkey' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext' 

只是不得不从它改变它:

 @Value("#{secretkey}') 

 @Value('${secretkey}') 

我希望这节省了一些人的时间。

好。 刚刚得到它。 你需要添加@Autowired像这样的东西:

 @Autowired @Value("${clientapi.url}") private StringValueResolver resolver; 

我使用的是spring 3.0.0.RELEASE

干杯

对于Spring 3.0,正确的方法是使用@Value("${expression}")

对于3.0之前的spring,你可以尝试:

 @Autowired private StringValueResolver resolver; 

这里没有上下文初始化问题,但是我不确定它会起作用。 使用parsing器可以parsing属性。

我的解决scheme是使用

 <context:property-override location="classpath:clientapi.properties" /> 

然后在clientapi.properties文件中

 clientPreferencesManager.clientApiUrl=http://localhost:8084/ClientAPI/resources/ 

这个也不错