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/
这个也不错