Como esta pregunta tiene una gran cantidad de golpes. Pensé que valdría la pena señalar otra opción utilizando SpEL (Spring Expression Language): si necesita propiedades específicas, puede inyectarlas utilizando la anotación @Value en propiedades de beans específicos;
class SomeClass {
@Value("#{serverProperties['com.svr.prop']}")
private String aServerCfgProperty;
@Value("#{someConfig['another.config.setting']}")
private String someOtherProperty;
}
Usted no necesita utilizar la sintaxis de indexación ['index.val']
sólo puede conseguirlo directamente;
@Value("#{someConfig}")
private Properties someConfig
@Value("#{serverProperties}")
private Properties svrProps;
He encontrado que esto más bien útil y movido lejos de usar las propiedades de objeto directamente inyectado a través de @ Recursos/@ Autowired.
Otro buen motivo para usar el @Value
con un objeto Propiedades indexado es que algunos IDEs (por ejemplo, IntelliJ) pueden refactorizar los nombres de propiedad reales si también tiene el archivo .properties en el proyecto. Otro consejo es usar algo como EProperties (que amplía el objeto nativo de Propiedades de Java) si desea incluir/anidar/sustituir en archivos de propiedades sin usar la clase PropertiesPlaceholderConfigurer
de Spring (que lamentablemente no expone sus propiedades - para usar la indexación de SpEL ['key']
necesita ser una instancia de Map<>
es decir, ampliar el mapa que hace el objeto Propiedades de Java) ...
Finalmente, otra característica interesante con SpEL es que puede acceder directamente a las propiedades de los granos. Por ejemplo, digamos si SomeClass
en el ejemplo anterior era un Spring Bean, p. Ej. someClass
luego en AnotherBeanClass podríamos tener;
@Value("#{someClass.someOtherProperty}")
private String injectedBeanProp
También puede llamar a un método de obtención:
@Value("#{someClass.getSomeOtherProperty()}")
private String injectedBeanProp
Consulte la guía SpEL aquí; http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#expressions
¡Gracias por la información y los ejemplos de código! Works – NightWolf