春天3+。通过占位符中的前缀解析属性

时间:2015-01-26 22:21:51

标签: java spring

在我的Java类中,我有一个类型的字段,比如java.util.Properties或java.util.Map。 我希望Spring为该字段注入以给定前缀开头的所有属性。理想情况下,通过在属性注释中指定通配符,像@Value(${prefix.*})这样的smth似乎无法正常工作。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

AFAIK没有直接的方法来实现您的目标。

但是,您可以将Spring ELorg.springframework.core.io.support.PropertiesLoaderSupport的自定义实施结合使用。

首先扩展PropertiesLoaderSupport或其任何子类)。引入一个方法( say 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
<bean id="customPropertyLoader" class="x.y.z.CustomPropertyLoader">
    <property name="locations" value="classpath*:/**/some*.properties"/>
</bean>

上次在您的课程中注明类型java.util.Properties的字段为 @Value(#{customPropertyLoader.filterProperties('prefix.*')})

P.S。:请原谅任何编译/语法错误,因为我没有编译并检查设置;但它应该工作。如果没有,请在评论中告知。