如果我有一個接口I
,並實現它的一些類,是有可能注入的陣列I[]
或List<I>
成豆?我發現可以使用<list></list>
來完成List<Object>
,但我想在此處參數化我的列表 - 要麼是I
。春:注射某種類型的數組或列表成豆
列表/數組中元素的數量是固定的,並在運行時間之前確定。
感謝提前:-)
如果我有一個接口I
,並實現它的一些類,是有可能注入的陣列I[]
或List<I>
成豆?我發現可以使用<list></list>
來完成List<Object>
,但我想在此處參數化我的列表 - 要麼是I
。春:注射某種類型的數組或列表成豆
列表/數組中元素的數量是固定的,並在運行時間之前確定。
感謝提前:-)
那是不可能的,因爲在編譯時JAVA類型擦除來實現任何反饋。 JAVA泛型僅在編譯時可用,並且確保類型安全。在運行時只剩下對象(引用)。
可以做,以確保類型安全(但仍運行時)的唯一的事情就是有什麼類型的數組,並使用彈簧<陣列> < /陣列>或<列表> < /列表>標籤來填充數據。然後在運行時,當你嘗試使用字符串填充Integer []時,你會得到一個異常。
如果您使用泛型,你可以已經設置<整數>和運行時間結束了集<字符串>因爲上述類型擦除。
如果你想要基於通用類型的動態自動佈線,那麼由於類型擦除而不需要。如果你只是想連線定義爲List<String>
類型(或其他)的列表,沒有什麼阻止你這樣做,例如:
應用程序上下文:
<util:list id="theList">
<value>a</value>
<value>b</value>
</util:list>
Java類:
@Resource(name = "theList")
List<String> theList;
雖然這不會提供類型安全性。
錯誤,因爲沒有什麼東西從「列表
我春天3.1有可能注入它作爲:
@Inject
List<I> list;
其中I
是你的界面(但它應該是具體的)。
或者你可以使用的Spring Java配置(@Configuration
)生產(@Bean
)評選名單,並使用Qualifier
或@Named
它們注入。
你也可以定義類型化的命名列表爲here:
<?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>
這篇文章暗示,否則...... http://stackoverflow.com/a/2416145/1154145。但我不確定這是否適用於接口。 – nattyddubbs 2013-03-19 20:02:35
with您可以定義值的解釋方式,但不是類型安全。類型擦除:http://docs.oracle.com/javase/tutorial/java/generics/erasure.html –
emd
2013-03-19 20:09:38