Spring properties (property-placeholder) autowiring
I have in my applicationContext.xml
<context:property-placeholder location="classpath*:*.properties" />
<bean id="clientPreferencesManager" class="pl.bildpresse.bildchat2.business.ClientPreferencesManager" >
<property name="clientApiUrl" val开发者_运维问答ue="${clientapi.url}" />
</bean>
Is it possible to do the same by autowire ? Something like :
@Autowired
@Qualifier("${clientapi.url}")
public void setClientApiUrl(String clientApiUrl) {
this.clientApiUrl = clientApiUrl;
}
You can use @Value
:
@Value("${clientapi.url}")
public void setClientApiUrl(String clientApiUrl) {
this.clientApiUrl = clientApiUrl;
}
It took me some time to understand why it didn't work. I always used a #
instead of a $
. I always got the message:
EL1008E:(pos 0): Field or property 'secretkey' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
Just had to change it from:
@Value("#{secretkey}')
to
@Value('${secretkey}')
I hope this saves somebody's time.
Ok. Just got it. You need to add @Autowired Something like:
@Autowired
@Value("${clientapi.url}")
private StringValueResolver resolver;
I'm using spring 3.0.0.RELEASE
Cheers
For spring 3.0, the correct way is the one shown - using @Value("${expression}")
For spring pre-3.0, you can try:
@Autowired
private StringValueResolver resolver;
There were no context initialization problems here, but I'm not sure it will work. Using the resolver you can resolve properties.
My solution is to use
<context:property-override location="classpath:clientapi.properties" />
and then in clientapi.properties file
clientPreferencesManager.clientApiUrl=http://localhost:8084/ClientAPI/resources/
This one is good too
精彩评论