![](/img/trans.png)
[英]What's the easiest/proper way to wire Spring beans outside a webapp?
[英]What is the easiest way to specify a list with values in Spring?
假設我有一個很大的值列表aa bb cc dd ee ff gg等,我需要在春天作為構造函數傳遞
如果我需要配置為字符串數組,那么在spring中很容易,因為我們可以將值指定為逗號分隔為aa,bb,cc等,
如果我需要配置為列表,我需要像下面這樣做
<bean name="myBean" class="MyClass">
<constructor-arg>
<list>
<value>aa</value>
<value>bb</value>
<value>cc</value>
<value>dd</value>
</list>
</constructor-arg>
</bean>
當數值增加時,它占據了巨大的線條,看起來很丑陋。
有人可以幫助我如何將大值作為字符串中的列表作為構造函數傳遞?
傳遞給列表的值是否來自屬性文件? 如果是這樣,您可以使用以下內容:
<bean name="myBean" class="MyClass">
<constructor-arg>
<bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
<constructor-arg type="java.lang.String" value="${list.value}"/>
</bean>
</constructor-arg>
</bean>
使用以下.properties文件
list.value=aa,bb,cc,dd
如果沒有,你顯然可以直接通過:
<bean name="myBean" class="MyClass">
<constructor-arg>
<bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
<constructor-arg type="java.lang.String" value="aa,bb,cc,dd"/>
</bean>
</constructor-arg>
</bean>
Spring可以自動將任何逗號分隔的字符串轉換為列表或數組:
public class Foo {
public void setValueList(String[] values) { ... }
}
<bean class="Foo"
p:valueList="a,b,c,d" />
<bean class="Foo"
c:_0="a,b,c,d" />
<bean class="Foo">
<constructor-arg><value>a,b,c,d</value></constructor-arg>
</bean>
實際上,即使字符串中只有1個值,也沒有逗號,它仍然有效。
沒有必要調用org.springframework.util.StringUtils,有人在另一個答案中提到。
構造函數args的這個詞也是(c:_0是使用c命名空間的<constructor-arg index =“0”>的簡寫。
你可以嘗試更簡單的東西,並使用Spring表達式語言將值轉換為列表:
<bean name="myBean" class="MyClass">
<constructor-arg value="#{T(java.util.Arrays).asList('${list.values}')}"/>
</bean>
如果您使用的是最新的Spring框架版本(我認為是Spring 3.1+),那么您不需要在SpringEL中使用那些字符串拆分的東西,
只需在Spring的Configuration類(帶有注釋的配置類)中添加PropertySourcesPlaceholderConfigurer和DefaultConversionService,例如,
@Configuration
public class AppConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean public ConversionService conversionService() {
return new DefaultConversionService();
}
}
在你的班上
@Value("${list}")
private List<String> list;
或者在構造函數的參數上使用@Value注釋,如果這是你想要做的。
最后在屬性文件中
list=A,B,C,D,E
如果沒有DefaultConversionService,只能在將值注入字段時將逗號分隔的String轉換為String數組,但DefaultConversionService會為您做一些方便的魔術,並將這些添加到Collection,Array等中。(如果你是的話,請檢查實現)想了解更多信息)
有了這兩個,它甚至可以處理所有冗余空格,包括換行符,因此您無需添加額外的邏輯來修剪它們。
您可以實現一個構造函數,該構造函數將逗號分隔的String作為其參數(並將該字符串自己拆分為值)。
如果你想要一個適用於任何構造函數/屬性的解決方案,你可以看看實現自己的PropertyEditor
並配置Spring來使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.