如果我有一个接口I
,以及一些实现它的类,是否可以将一个数组I[]
或List<I>
注入一个bean?我看到可以使用List<Object>
为<list></list>
完成,但我想在此处对我的列表进行参数化 - 或者获取类型I
的数组。
列表/数组中的元素数量是固定的,并在运行时确定。
感谢您提前获得任何反馈: - )
答案 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;
但这不会提供类型安全。