我想在.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:如果可能的话,我想这样做没有任何自定义代码。
我更喜欢的方式(特别是字符串)是以下一个:
admin.user={'Doe, John','Headroom, Max','Mouse, Micky'}
和使用
@Value("#{${admin.user}}")
private List<String> userList;
通过这种方式,还可以在参数中包含逗号。它也适用于集合。
您可以使用这样的注释来实现这一点
@Value("#{T(java.util.Arrays).asList('${my.list.of.strings:a,b,c}')}")
private List<String> mylist;
这里my.list.of.strings将从属性文件中选择,如果它不在那里,那么将使用默认的a,b,c
在属性文件中,你可以有这样的东西
my.list.of.strings = d, e, f
你是否考虑过@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(","));
}
}
我倾向于用这些方法中的一种来进行自动装配,以增强代码的可测试性。
如果您正在阅读这篇文章,并且正在使用Spring Boot,那么对于这个特性,您还有另外一个选项
通常逗号分隔的列表在现实世界中是非常笨拙的
(有时甚至是不可行的,如果你想在你的配置中使用逗号):
email.sendTo=somebody@example.com,somebody2@example.com,somebody3@example.com,.....
使用Spring Boot,你可以这样写(索引从0开始):
email.sendTo[0]=somebody@example.com
email.sendTo[1]=somebody2@example.com
email.sendTo[2]=somebody3@example.com
像这样使用它:
@Component
@ConfigurationProperties("email")
public class EmailProperties {
private List<String> sendTo;
public List<String> getSendTo() {
return sendTo;
}
public void setSendTo(List<String> sendTo) {
this.sendTo = sendTo;
}
}
@Component
public class EmailModel {
@Autowired
private EmailProperties emailProperties;
//Use the sendTo List by
//emailProperties.getSendTo()
}
@Configuration
public class YourConfiguration {
@Bean
public EmailProperties emailProperties(){
return new EmailProperties();
}
}
#Put this in src/main/resource/META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=example.compackage.YourConfiguration