我有一个这样的课程:
class MyClass {
Map<String, String[]> arrays;
public void setArrays(Map<String, String[]> arrays)
{
this.arrays = arrays;
}
public String[] getArray(String key)
{
return arrays.get(key);
}
}
这些值来自如下属性文件:
# my.properties
arrays.arrayOne=a,b,c
arrays.arrayTwo=d,e,f
使用弹簧我可以这样连接属性:
<property name="arrays">
<map>
<entry key="arrayOne" value="${arrays.arrayOne}"/>
<entry key="arrayTwo" value="${arrays.arrayTwo}"/>
</map>
</property>
现在,这可行,但每次在属性文件中添加新条目时,我都必须手动编辑连线。有更好的方法吗?
答案 0 :(得分:5)
我使用PropertyOverrideConfigurer解决了我的问题:
<!-- applicationContext.xml -->
<bean id="myBean" class="com.myapp.MyClass">
<property name="arrays">
<map/>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
<property name="location" value="classpath:my.properties"/>
</bean>
(我也可以直接在我的班级中启动地图,使代码更简洁)
# my.properties
myBean.arrays[arrayOne]=a,b,c
myBean.arrays[arrayTwo]=d,e,f
这就是所需要的,并且spring正确地填充了地图,添加到正在更新的属性文件而无需进一步配置。在我的bean上调用getArray(“arrayOne”)会按预期返回一个字符串数组{“a”,“b”,“c”}。