在我的Java类中,我有一个类型的字段,比如java.util.Properties或java.util.Map。 我希望Spring为所有以给定前缀开头的属性注入字段。理想情况下,通过在属性注释中指定通配符,像@Value(${prefix.*})
那样好像不起作用。Spring 3+。通过前缀在占位符中解析属性
我该如何做到这一点?
在我的Java类中,我有一个类型的字段,比如java.util.Properties或java.util.Map。 我希望Spring为所有以给定前缀开头的属性注入字段。理想情况下,通过在属性注释中指定通配符,像@Value(${prefix.*})
那样好像不起作用。Spring 3+。通过前缀在占位符中解析属性
我该如何做到这一点?
AFAIK没有直接的方法来实现你正在寻找的东西。
但是,您可以使用Spring EL
结合自定义实现org.springframework.core.io.support.PropertiesLoaderSupport
。
首先延长PropertiesLoaderSupport(或任何的它的子类)。介绍一个方法(说filterProps),这将返回java.util.Properties
对象,具有过滤性能,如下面
public class CustomPropertyLoader extends PropertiesLoaderSupport {
public Properties filterProperties(String prefix){
Properties temp = new Properties();
for(Properties props : this.localProperties){
/*
* Iterate over props and filter them as
* per prefix (or any custom logic) to temp
*/
}
return temp;
}
}
提示 - 您可以使用正则表达式的更通用的方案,而不是String
作为方法参数。
二定义上面的类
<bean id="customPropertyLoader" class="x.y.z.CustomPropertyLoader">
<property name="locations" value="classpath*:/**/some*.properties"/>
</bean>
最后注释java.util.Properties
类型的类领域的相应bean作为 @Value(#{customPropertyLoader.filterProperties('prefix.*')})
附::请原谅编译/语法错误,因为我没有编译并检查设置;但它应该工作。如果不是,请在评论中告知。
您是否试图在Spring Boot中阅读这些属性?如果是的话,你可以使用@ConfigurationProperties(prefix =“yourPrefix”)' – Mithun 2015-01-27 06:46:24