2009-11-16 16 views

Respuesta

0

¿Ha logrado que funcione al inyectar explícitamente el valor del archivo de definición de bean utilizando la sintaxis de la propiedad? En teoría, si eso funciona, entonces debería poder usar la misma expresión en @Value. Por lo demás, debe ser capaz de hacerlo utilizando @Autowired @Qualifier también

0

no creo que es posible acceder a las propiedades cargadas por PropertyPlaceHolderConfigurer utilizando SPEL en una anotación @Value. Sería muy bueno, pero por lo que yo sé, la segunda mejor opción es declarar:

<util:properties id="props" location="classpath:xxx/yyy/app.props"/> 

que puede apuntar a las mismas propiedades de archivo como su PropertyPlaceHolderConfigurer.

+1

Puede también crea tu propia PropertyPlaceHolde rConfigurer que expone sus propiedades. Puede encontrar un ejemplo de esto aquí: http://mortarproject.svn.sourceforge.net/viewvc/mortarproject/src/trunk/mortar-core/src/main/java/org/mortar/spring/beans/factory/config /EnhancedPropertyPlaceholderConfigurer.java?revision=70&view=markup Tendrás que registrarlo usando el antiguo en lugar del más reciente, para que puedas establecer un id y luego enviarlo a tu etiqueta de valor como @Value (# {xxx.properties ['foo.bar']}) – pakman

+0

No creo que deba poner el nombre del archivo xxx.properties, el resorte carga todos los archivos de propiedades, solo tiene que asegurarse de que su clave es única entre todos los archivos de propiedades. – Ashish

+0

Esto es incorrecto. A partir de la primavera 3 puede acceder a los valores de PropertyPlaceHolderConfigurer usando SPEL. –

15

Pregunta anterior, pero todavía vale la pena ser respondida. Puede usar la expresión de la misma manera que lo haría con el PropertyPlaceholderConfigurer original.

app.properties

app.value=Injected 

App-context.xml

<bean id="propertyConfigurer" class="MyPropertyPlaceholderConfigurer"> 
     <property name="location"> 
     <value>file:app.properties</value> 
     </property> 
    </bean> 

en el bean destino

@Value(value="${app.value}") 
    private String injected; 

Probado este enfoque utilizando Spring 3.0.6

+0

El # {..} extra es inútil (realiza una evaluación de SpEL de una cadena estática). Desde Spring 3.x, la sintaxis de $ {app.value} es compatible con las anotaciones de @Value, y se puede usar para inyectar la propiedad (pero probablemente no era así en el momento en que se hizo esta pregunta). – MikeN

+0

Tiene razón con respecto al # {...} adicional. Puedes omitirlo y obtendrás el mismo resultado. Corregiré mi respuesta para deshacerme de ella. – micfra

Cuestiones relacionadas