簡體   English   中英

Spring:將某種類型的數組或列表注入bean中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM