Spring:如何使用@Value注释注入内联字符串列表

Bri*_*ace 8 java spring

如何使用@Value注释注入字符串值列表.我正在使用Spring 4.1.2.

我试过了:

@Value(value = "top, person, organizationalPerson, user")
private List<String> userObjectClasses
Run Code Online (Sandbox Code Playgroud)

然后根据内联列表spring el文档:

@Value(value = "{top, person, organizationalPerson, user}")
private List<String> userObjectClasses
Run Code Online (Sandbox Code Playgroud)

这些尝试仅注入作为列表中唯一元素给出的值的字符串文字.

编辑

在这种情况下,我希望能够简单地对值进行硬编码,而不是从属性文件中读取.这种方法看起来有点不如:

private List<String> userObjectClasses = Arrays.asList(new String[] {"top", "person", "organizationalPerson", "user"});
Run Code Online (Sandbox Code Playgroud)

在过去,我使用spring的XML配置来连接bean,在这种情况下我可以做(假设bean有一个userObjectClasses属性的公共setter ):

<property value="userObjectClass">
  <list>
    <value>top</value>
    <value>person</value>
    <value>organizationalPerson</value>
    <value>user</value>
  </list>
</property>
Run Code Online (Sandbox Code Playgroud)

使用基于注释的配置时是否有类似的功能?

Yur*_*uri 29

list.of.strings=first,second,third 从属性文件中获取例如

然后使用SpEL:

 @Value("#{'${list.of.strings}'.split(',')}") 
 private List<String> list;
Run Code Online (Sandbox Code Playgroud)

编辑

然后我认为你不需要为这种类型的任务使用注释.您可以完成所有工作,就像您已经进行了操作一样,或者在@PostConstruct中进行初始化某些字段.

  • 如果你的引用是`array`或`Collection`,spring convertion服务将为你执行拆分,所以你不需要那个丑陋的表达式:只是`@Value("$ {list.of.strings}")` (15认同)
  • @ErinDrummond内部使用[StringUtils.commaDelimitedListToStringArray](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/StringUtils.html#commaDelimitedListToStringArray-java.lang.String-) ; 所以是的,它依赖于以逗号分隔的格式. (3认同)