我想在.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:如果可能的话,我想这样做没有任何自定义代码。


当前回答

从Spring 3.0开始,你可以添加一行像

<bean id="conversionService" 
    class="org.springframework.context.support.ConversionServiceFactoryBean" />

到你的applicationContext.xml(或者你配置的地方)。 正如Dmitry Chornyi在评论中指出的那样,基于Java的配置看起来是这样的:

@Bean public ConversionService conversionService() {
    return new DefaultConversionService();
}

这将激活新的配置服务,该服务支持将字符串转换为集合类型。 如果您不激活这个配置服务,Spring将依赖其遗留属性编辑器作为配置服务,它不支持这种类型的转换。

转换为其他类型的集合也可以:

@Value("${my.list.of.ints}")
private List<Integer> myList

会不会跟线条一样

 my.list.of.ints= 1, 2, 3, 4

这里的空白没有问题,ConversionServiceFactoryBean会处理它。

看到http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ core-convert-Spring-config

在Spring应用程序中,通常为每个Spring容器(或ApplicationContext)配置一个ConversionService实例。该ConversionService将被Spring拾取,然后在框架需要执行类型转换时使用。 […] 如果没有向Spring注册ConversionService,则使用原始的基于properteditor的系统。

其他回答

如果您正在使用Spring Boot 2,那么它就可以正常工作,不需要任何额外的配置。

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

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

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

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

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

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

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

和使用

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

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

如果使用属性占位符,则ser1702544示例将变成

@Value("#{myConfigProperties['myproperty'].trim().replaceAll(\"\\s*(?=,)|(?<=,)\\s*\", \"\").split(',')}") 

使用占位符xml:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">   
    <property name="properties" ref="myConfigProperties" />
    <property name="placeholderPrefix"><value>$myConfigProperties{</value></property>
</bean>    

<bean id="myConfigProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
     <property name="locations">
         <list>
                <value>classpath:myprops.properties</value>
         </list>
     </property>
</bean> 

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

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

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

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

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

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