【问题标题】:Spring: how to inject an inline list of strings using @Value annotation [duplicate]Spring:如何使用@Value注解注入内联字符串列表[重复]
【发布时间】:2015-02-08 00:27:39
【问题描述】:

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

我试过了:

@Value(value = "top, person, organizationalPerson, user")
private List<String> userObjectClasses

然后基于spring el documentation for inline lists:

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

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

编辑

在这种情况下,我希望能够简单地对值进行硬编码,而不是从属性文件中读取。这种方法似乎比:

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

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

<property value="userObjectClass">
  <list>
    <value>top</value>
    <value>person</value>
    <value>organizationalPerson</value>
    <value>user</value>
  </list>
</property>

在使用基于注解的配置时是否有类似的情况?

【问题讨论】:

  • 答案还没有帮助?如果它有帮助 - 那么您可以将问题标记为已回答。顺便说一句,下面的评论也有帮助。

标签: java spring


【解决方案1】:

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

然后使用SpEL:

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

编辑

那么我认为您不需要对此类任务使用注释。您可以按照您提到的或在@PostConstruct 中提到的所有工作来初始化某些字段。

【讨论】:

  • 如果您的引用是 arrayCollection,spring 转换服务将为您执行拆分,因此您不需要那个丑陋的表达式:只需 @Value("${list.of.strings}")
  • @CostiCiudatu 它如何知道要拆分的分隔符?这仅适用于,吗?
  • @ErinDrummond 它在内部使用StringUtils.commaDelimitedListToStringArray;所以是的,它依赖于逗号分隔的格式。
  • @CostiCiudatu 如何启用弹簧转换服务?默认情况下不为我工作。 spring4
猜你喜欢
  • 2021-01-13
  • 2013-01-15
  • 2011-09-19
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
相关资源
最近更新 更多