web-dev-qa-db-ja.com

Springプロパティ(プロパティプレースホルダー)自動配線

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;
}
40
Piotr Gwiazda

@Valueを使用できます:

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

なぜ機能しなかったのかを理解するのに時間がかかりました。私はいつも#の代わりに$。私はいつもメッセージを受け取りました:

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

変更する必要がありました:

@Value("#{secretkey}')

@Value('${secretkey}')

これが誰かの時間を節約することを願っています。

8
Felix

OK。わかった。次のような@Autowiredを追加する必要があります。

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

Spring 3.0.0.RELEASEを使用しています

乾杯

5
Costa

春3.0の場合、正しい方法は次のとおりです-@Value("${expression}")を使用する

3.0より前の春の場合、次を試すことができます。

@Autowired
private StringValueResolver resolver;

ここにはコンテキスト初期化の問題はありませんでしたが、うまくいくかどうかはわかりません。リゾルバーを使用して、プロパティを解決できます。

2
Bozho

私の解決策は

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

そしてclientapi.properties file

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

これもいい

1
Piotr Gwiazda