spring - suggestion - Propiedades de primavera(propiedad-placeholder) autowiring
placeholder textbox (5)
Tengo en mi aplicaciónContext.xml
<context:property-placeholder location="classpath*:*.properties" />
<bean id="clientPreferencesManager" class="pl.bildpresse.bildchat2.business.ClientPreferencesManager" >
<property name="clientApiUrl" value="${clientapi.url}" />
</bean>
¿Es posible hacer lo mismo por autowire? Algo como :
@Autowired
@Qualifier("${clientapi.url}")
public void setClientApiUrl(String clientApiUrl) {
this.clientApiUrl = clientApiUrl;
}
De acuerdo. Acabo de recibirlo. Necesitas agregar @Autowired Algo como:
@Autowired
@Value("${clientapi.url}")
private StringValueResolver resolver;
Estoy usando spring 3.0.0.RELEASE
Aclamaciones
Me tomó un tiempo entender por qué no funcionó. Siempre usé un #
lugar de un $
. Siempre recibí el mensaje:
EL1008E:(pos 0): Field or property ''secretkey'' cannot be found on object of type ''org.springframework.beans.factory.config.BeanExpressionContext''
Solo tuve que cambiarlo de:
@Value("#{secretkey}'')
a
@Value(''${secretkey}'')
Espero que esto ahorre el tiempo de alguien.
Mi solución es usar
<context:property-override location="classpath:clientapi.properties" />
y luego en el archivo clientapi.properties
clientPreferencesManager.clientApiUrl=http://localhost:8084/ClientAPI/resources/
Éste también es bueno
Para la primavera 3.0, la forma correcta es la que se muestra: usando @Value("${expression}")
Para la primavera pre-3.0, puedes probar:
@Autowired
private StringValueResolver resolver;
No hubo problemas de inicialización de contexto aquí, pero no estoy seguro de que funcionará. Usando el resolutor puedes resolver propiedades.
Puedes usar @Value
:
@Value("${clientapi.url}")
public void setClientApiUrl(String clientApiUrl) {
this.clientApiUrl = clientApiUrl;
}