leer example ejemplo archivo application spring spring-el

spring - example - ¿Cómo obtengo un valor de propiedad de un objeto ApplicationContext?(no usando una anotación)



leer properties java spring (3)

Si tengo:

@Autowired private ApplicationContext ctx;

Puedo obtener beans y recursos utilizando uno de los métodos getBean. Sin embargo, no puedo averiguar cómo obtener valores de propiedad.

Obviamente, puedo crear un nuevo bean que tenga una propiedad @Value como:

private @Value("${someProp}") String somePropValue;

¿Qué método invoco en el objeto ApplicationContext para obtener ese valor sin autowiring un bean?

Normalmente utilizo @Value, pero hay una situación en la que la expresión SPeL debe ser dinámica, por lo que no puedo usar una anotación.


En el caso en que la expresión SPeL necesite ser dinámica, obtenga el valor de propiedad manualmente:

somePropValue = ctx.getEnvironment().getProperty("someProp");


Si está atrapado en Spring pre 3.1, puede usar

somePropValue = ctx.getBeanFactory().resolveEmbeddedValue("${someProp}");


Suponiendo que la propiedad ${someProp} proviene de un PropertyPlaceHolderConfigurer, eso dificulta las cosas. PropertyPlaceholderConfigurer es un BeanFactoryPostProcessor y, como tal, solo está disponible en el momento del inicio del contenedor. Entonces las propiedades no están disponibles para un bean en tiempo de ejecución.

Una solución sería crear algún tipo de bean titular de valor que inicie con la propiedad / propiedades que necesita.

@Component public class PropertyHolder{ @Value("${props.foo}") private String foo; @Value("${props.bar}") private String bar; // + getter methods }

Ahora inyecte este PropertyHolder donde necesite las propiedades y acceda a las propiedades a través de los métodos de obtención.