[英]Spring: Injecting an Array or List of some type into a bean
如果我有一個接口I
,以及一些實現它的類,是否可以將一個數組I[]
或List<I>
注入一個bean? 我看到它可以使用<list></list>
為List<Object>
完成,但是我想在這里對我的列表進行參數化 - 無論是那個還是得到一個類型為I
的數組。
列表/數組中的元素數量是在運行時之前固定和確定的。
感謝提前的任何反饋:-)
我在Spring 3.1中可以將其注入:
@Inject
List<I> list;
I
是你的界面(但它應該是具體的)。
或者您可以使用Spring Java Config( @Configuration
)生成( @Bean
)命名列表,並使用Qualifier
或@Named
注入它們。
您也可以在此處定義鍵入的命名列表:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<util:list id="myList" value-type="java.lang.String">
<value>foo</value>
<value>bar</value>
</util:list>
由於編譯時JAVA類型擦除,這是不可能實現的。 JAVA泛型僅在編譯時可用,並確保類型安全。 在運行時,只剩下Object(引用)。
您可以做的唯一確保類型安全(但仍然是運行時)的是擁有任何類型的數組,並使用spring <array> </ array>或<list> </ list>標記來填充數據。 然后在運行時,當您嘗試使用字符串填充Integer []時,將會出現異常。
如果使用泛型,則可以使用Set <Integer>,並且在運行時最終使用Set <String>,因為提到的類型擦除。
如果您想要基於泛型類型的動態自動布線,則由於類型擦除而不需要。 如果您只想連接定義為類型List<String>
(或其他)的列表,則沒有什么可以阻止您這樣做,例如:
應用背景:
<util:list id="theList">
<value>a</value>
<value>b</value>
</util:list>
Java類:
@Resource(name = "theList")
List<String> theList;
但是,這不會提供類型安全性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.