3

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

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

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

4

3 回答 3

2

我 Spring 3.1 可以将其注入为:

@Inject
List<I> list;

你的界面在哪里I(但它应该是具体的)。

或者您可以使用 Spring Java Config( @Configuration) 生成 ( @Bean) 命名列表并使用Qualifieror注入它们@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>
于 2013-03-19T20:13:44.770 回答
0

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

应用环境:

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

Java类:

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

但是,这不会提供类型安全。

于 2013-03-19T20:06:01.593 回答
0

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

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

如果您使用泛型,则可以使用 Set<Integer> 并在运行时以 Set<String> 结束,因为提到的类型擦除。

于 2013-03-19T19:46:22.877 回答