我想在.properties文件中有一个值列表,即:

my.list.of.strings=ABC,CDE,EFG

并直接在我的类中加载它,即:

@Value("${my.list.of.strings}")
private List<String> myList;

据我所知,另一种方法是将它放在spring配置文件中,并将其作为bean引用加载(如果我错了请纠正我),即

<bean name="list">
 <list>
  <value>ABC</value>
  <value>CDE</value>
  <value>EFG</value>
 </list>
</bean>

但是有没有办法做到这一点呢?使用.properties文件? ps:如果可能的话,我想这样做没有任何自定义代码。


当前回答

以上答案都是正确的。但是您可以在一行中实现这一点。 请尝试下面的声明,您将在String列表中获得所有逗号分隔的值。

private @Value("#{T(java.util.Arrays).asList(projectProperties['my.list.of.strings'])}") List<String> myList;

您还需要在xml配置中定义以下行。

<util:properties id="projectProperties" location="/project.properties"/>

只需替换属性文件的路径和文件名。这样就可以开始了。:)

希望这对你有所帮助。欢呼。

其他回答

使用Spring EL:

@Value("#{'${my.list.of.strings}'.split(',')}") 
private List<String> myList;

假设你的属性文件正确加载如下:

my.list.of.strings=ABC,CDE,EFG

我更喜欢的方式(特别是字符串)是以下一个:

admin.user={'Doe, John','Headroom, Max','Mouse, Micky'}

和使用

@Value("#{${admin.user}}")
private List<String> userList;

通过这种方式,还可以在参数中包含逗号。它也适用于集合。

你是否考虑过@Autowireding构造函数或在body中使用setter和String.split() ?

class MyClass {
    private List<String> myList;

    @Autowired
    public MyClass(@Value("${my.list.of.strings}") final String strs) {
        myList = Arrays.asList(strs.split(","));
    }

    //or

    @Autowired
    public void setMyList(@Value("${my.list.of.strings}") final String strs) {
        myList = Arrays.asList(strs.split(","));
    }
}

我倾向于用这些方法中的一种来进行自动装配,以增强代码的可测试性。

我认为这对于获取数组和剥离空格更简单:

@Value("#{'${my.array}'.replace(' ', '').split(',')}")
private List<String> array;

通过指定my.list.of。字符串=ABC,CDE,EFG在.properties文件和使用

@ value (" $ {my.list.of.strings} ") private String[] myString;

你可以得到字符串的数组。并使用CollectionUtils。addAll(myList, myString),你可以得到字符串列表。