2008-10-20 17 views
6

Me gustaría anotar un método con una referencia a una sola propiedad en un archivo de propiedades para inyección.¿Cómo puedo inyectar un único valor de propiedad en una cadena utilizando la primavera 2.5.x?

@Resource("${my.service.url}") 
private String myServiceUrl; 

Por supuesto, esta sintaxis no funciona;) Es por eso que estoy preguntando aquí.

Soy consciente de que puedo inyectar el archivo de propiedades completo, pero eso parece excesivo, no quiero el archivo de propiedades, quiero el valor configurado.

Editar: Solo puedo ver ejemplos de PropertyPlaceholderConfigurer donde XML se usa para conectar la propiedad al campo dado. Todavía no puedo entender cómo se puede lograr esto con una anotación.

Respuesta

4

Hay un hilo sobre esto en el Spring forum. La respuesta corta es que realmente no hay forma de inyectar una sola propiedad usando anotaciones.

He oído que la compatibilidad con el uso de anotaciones mejorará en Spring 3.0, por lo que es probable que esto se solucione pronto.

0

puede hacerlo si usa la configuración XML. Sólo debe configurar PropertyPlaceholderConfigurer y especificar valor de la propiedad en la configuración

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <value>classpath:com/foo/jdbc.properties</value> 
    </property> 
</bean> 
<bean ...> 
    <property name="myServiceUrl" value="${my.service.url}"/> 
</bean> 
7

sé que ha pasado un tiempo desde la publicación original, pero he conseguido tropezar a través de una solución a este 2.5.x para la primavera

Puede crear instancias de "cadena" frijoles en la configuración XML resorte que a continuación, se puede inyectar en los componentes anotados

@Component 
public class SomeCompent{ 
    @Autowired(required=true 
    @Resource("someStringBeanId") 
    private String aProperty; 

    ... 
} 

<beans ....> 
    <context:component-scan base-package="..."/> 

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    ... 
    </bean> 
    <bean id="someStringId" class="java.lang.String" factory-method="valueOf"> 
    <constructor-arg value="${place-holder}"/> 
    </bean> 
</beans> 
+0

Esta solución no funciona para mí. En primer lugar, parece que hay errores de sintaxis en todo el lugar; le falta el paréntesis derecho después de la declaración de autoenvío, y la anotación de recursos le falta el atributo de nombre. Finalmente, obtengo una BeanCreationException con este XML :( – IcedDante

Cuestiones relacionadas