Spring:将某种类型的数组或列表注入bean中

时间:2013-03-19 19:42:09

标签: java spring

如果我有一个接口I,以及一些实现它的类,是否可以将一个数组I[]List<I>注入一个bean?我看到可以使用List<Object><list></list>完成,但我想在此处对我的列表进行参数化 - 或者获取类型I的数组。

列表/数组中的元素数量是固定的,并在运行时确定。

感谢您提前获得任何反馈: - )

3 个答案:

答案 0 :(得分:2)

I Spring 3.1可以将其注入:

@Inject
List<I> list;

其中I是你的界面(但它应该具体)。

或者您可以使用Spring Java Config(@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>

答案 1 :(得分:0)

由于编译时JAVA类型的擦除,这是不可能实现的。 JAVA泛型仅在编译时可用,并确保类型安全。在运行时,只剩下Object(引用)。

你唯一可以确保类型安全(但仍然是运行时)的是拥有任何类型的数组并使用spring&lt; array&gt;&lt; / array&gt;或&lt; list&gt;&lt; / list&gt;用于填充数据的标签。然后在运行时,当您尝试使用字符串填充Integer []时会出现异常。

如果你使用泛型,你可以使用Set&lt; Integer&gt;并且在运行时以Set&lt; String&gt;结束因为提到的类型擦除。

答案 2 :(得分:0)

如果您想要基于通用类型的动态自动布线,则由于类型擦除而不需要。如果您只想连接定义为类型List<String>(或其他)的列表,则没有什么可以阻止您这样做,例如:

应用程序上下文:

<util:list id="theList">
    <value>a</value>
    <value>b</value>
</util:list>

Java类:

@Resource(name = "theList")
List<String> theList;  

但这不会提供类型安全。