Spring属性(property-placeholder)自动装配

时间:2010-05-21 13:43:37

标签: spring properties dependency-injection

我的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;
}

5 个答案:

答案 0 :(得分:78)

您可以使用@Value

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

答案 1 :(得分:8)

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

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

只需改变它:

@Value("#{secretkey}')

@Value('${secretkey}')

我希望这能节省一些时间。

答案 2 :(得分:5)

确定。刚刚得到它。你需要添加@Autowired 类似的东西:

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

我正在使用spring 3.0.0.RELEASE

干杯

答案 3 :(得分:2)

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

对于3.0之前的春季,您可以尝试:

@Autowired
private StringValueResolver resolver;

这里没有上下文初始化问题,但我不确定它是否有效。使用解析器,您可以解析属性。

答案 4 :(得分:1)

我的解决方案是使用

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

然后在 clientapi.properties 文件

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

这个也很好