如果我有一个接口I
和一些实现它的类,是否可以将数组I[]
或List<I>
bean 注入?我看到它可以通过List<Object>
使用来完成<list></list>
,但我想在这里参数化我的列表 - 或者获取类型的数组I
。
列表/数组中的元素数量是固定的,并在运行前确定。
感谢您提前提供任何反馈:-)
我 Spring 3.1 可以将其注入为:
@Inject
List<I> list;
你的界面在哪里I
(但它应该是具体的)。
或者您可以使用 Spring Java Config( @Configuration
) 生成 ( @Bean
) 命名列表并使用Qualifier
or注入它们@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>
如果您想要基于泛型类型的动态自动装配,那么不,由于类型擦除。如果您只想连接定义为类型List<String>
(或其他)的列表,则没有什么可以阻止您这样做,例如:
应用环境:
<util:list id="theList">
<value>a</value>
<value>b</value>
</util:list>
Java类:
@Resource(name = "theList")
List<String> theList;
但是,这不会提供类型安全。
由于编译时的 JAVA 类型擦除,这是不可能实现的。JAVA 泛型仅在编译时可用,用于确保类型安全。在运行时只剩下对象的(引用)。
唯一可以确保类型安全(但仍然是运行时)的方法是拥有任何类型的数组并使用 spring <array></array> 或 <list></list> 标签来填充数据。然后在运行时,当您尝试使用字符串填充 Integer[] 时会出现异常。
如果您使用泛型,则可以使用 Set<Integer> 并在运行时以 Set<String> 结束,因为提到的类型擦除。