40 votes

Printemps propriétés (propriété-espace réservé) autowiring

J'ai dans mon applicationContext.xml

 <context:property-placeholder location="classpath*:*.properties" />


<bean id="clientPreferencesManager" class="pl.bildpresse.bildchat2.business.ClientPreferencesManager" >
    <property name="clientApiUrl" value="${clientapi.url}" />     
</bean>
 

Est-il possible de faire la même chose par autowire? Quelque chose comme :

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

78voto

axtavt Points 126632

Vous pouvez utiliser @Value :

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

8voto

Felix Points 206

Il m'a fallu du temps pour comprendre pourquoi cela ne fonctionnait pas. J'ai toujours utilisé un "#" au lieu d'un "$". J'ai toujours reçu le message:

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

Il suffisait de le changer de:

 @Value("#{secretkey}')
 

à

 @Value('${secretkey}')
 

J'espère que cela fait gagner du temps à quelqu'un ...

5voto

Costa Points 41

D'accord. Viens de le recevoir. Vous devez ajouter @Autowired Quelque chose comme:

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

J'utilise Spring 3.0.0.LELEASE

À votre santé

2voto

Bozho Points 273663

Pour le printemps 3.0, la manière correcte est celle indiquée - en utilisant @Value("${expression}")

Pour le printemps pré-3.0, vous pouvez essayer:

 @Autowired
private StringValueResolver resolver;
 

Il n'y avait aucun problème d'initialisation de contexte ici, mais je ne suis pas sûr que cela fonctionnera. En utilisant le résolveur, vous pouvez résoudre les propriétés.

1voto

Piotr Gwiazda Points 5208

Ma solution est d'utiliser

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

puis dans le fichier clientapi.properties

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

Celui-ci est bon aussi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X