Eer*_*nen 2 java arrays spring properties
我有一个这样的课:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这些值是从属性文件中提供的,如下所示:
# my.properties
arrays.arrayOne=a,b,c
arrays.arrayTwo=d,e,f
Run Code Online (Sandbox Code Playgroud)
使用弹簧我可以这样连接属性:
<property name="arrays">
<map>
<entry key="arrayOne" value="${arrays.arrayOne}"/>
<entry key="arrayTwo" value="${arrays.arrayTwo}"/>
</map>
</property>
Run Code Online (Sandbox Code Playgroud)
现在,这可以工作,但每次我在属性文件中添加新条目时,我都必须手动编辑连线.有一个更好的方法吗?
我使用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>
Run Code Online (Sandbox Code Playgroud)
(我也可以直接在我的课程中初始化地图,使代码更简洁)
# my.properties
myBean.arrays[arrayOne]=a,b,c
myBean.arrays[arrayTwo]=d,e,f
Run Code Online (Sandbox Code Playgroud)
这就是所需要的,并且spring正确地填充了地图,添加到正在更新的属性文件而无需进一步配置.在我的bean上调用getArray("arrayOne")会返回一个字符串数组{"a","b","c"}.