我想使用 Spring 属性占位符填充 bean 列表属性。
上下文文件
<bean name="XXX" class="XX.YY.Z">
<property name="urlList">
<value>${prop.list}</value>
</property>
</bean>
属性文件
prop.list.one=foo
prop.list.two=bar
任何帮助将不胜感激
最佳答案
使用 util:properties element加载您的属性。您可以使用 PropertyPlaceholderConfigurer 指定文件的路径:
<bean name="XXX" class="XX.YY.Z">
<property name="urlList">
<util:properties location="${path.to.properties.file}"/>
</property>
</bean>
更新我误解了这个问题;您只想返回键以特定字符串开头的属性。实现这一目标的最简单方法是在 bean 的 setter 方法中执行此操作。您必须将字符串作为单独的属性传递给您的 bean。扩展上述声明:
<bean name="XXX" class="XX.YY.Z" init-method="init">
<property name="propertiesHolder">
<!-- not sure if location has to be customizable here; set it directly if needed -->
<util:properties location="${path.to.properties.file}"/>
</property>
<property name="propertyFilter" value="${property.filter}" />
</bean>
在您的 XX.YY.Z
bean 中:
private String propertyFilter;
private Properties propertiesHolder;
private List<String> urlList;
// add setter methods for propertyFilter / propertiesHolder
// initialization callback
public void init() {
urlList = new ArrayList<String>();
for (Enumeration en = this.propertiesHolder.keys(); en.hasMoreElements(); ) {
String key = (String) en.nextElement();
if (key.startsWith(this.propertyFilter + ".") { // or whatever condition you want to check
this.urlList.add(this.propertiesHolder.getProperty(key));
}
} // for
}
如果您需要在许多不同的地方执行此操作,您可以将上述功能包装到 FactoryBean 中。
关于spring - 使用 Spring 属性占位符从文件 .properties 中读取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1599086/