Java Spring:将某种类型的数组或列表注入bean
如果我有一个接口Java Spring:将某种类型的数组或列表注入bean,java,spring,Java,Spring,如果我有一个接口I,以及一些实现它的类,那么可以将数组I[]或List注入bean吗?我知道可以使用为列表执行此操作,但我想在这里参数化我的列表-要么这样,要么获取类型为I的数组 列表/数组中的元素数是固定的,并在运行前确定 感谢您提前提供反馈:-)这是不可能实现的,因为编译时会进行JAVA类型的擦除。JAVA泛型仅在编译时可用,用于确保类型安全。在运行时,只剩下对象(引用) 确保类型安全(但仍然是运行时)的唯一方法是使用任何类型的数组并使用spring或标记填充数据。然后在运行时,当您尝试用字
I
,以及一些实现它的类,那么可以将数组I[]
或List
注入bean吗?我知道可以使用
为列表
执行此操作,但我想在这里参数化我的列表-要么这样,要么获取类型为I
的数组
列表/数组中的元素数是固定的,并在运行前确定
感谢您提前提供反馈:-)这是不可能实现的,因为编译时会进行JAVA类型的擦除。JAVA泛型仅在编译时可用,用于确保类型安全。在运行时,只剩下对象(引用) 确保类型安全(但仍然是运行时)的唯一方法是使用任何类型的数组并使用spring或标记填充数据。然后在运行时,当您尝试用字符串填充整数[]时,您将得到一个异常
如果您使用泛型,您可以使用Set,并且在运行时由于所提到的类型擦除而以Set结束 如果需要基于泛型类型的动态自动布线,则由于类型擦除,不需要。如果您只想连接定义为type
list
(或其他类型)的列表,则没有任何东西可以阻止您这样做,例如:
应用程序上下文:
<util:list id="theList">
<value>a</value>
<value>b</value>
</util:list>
A.
B
Java类:
@Resource(name = "theList")
List<String> theList;
@Resource(name=“theList”)
列出清单;
但是,这不会提供类型安全性。I Spring 3.1可以将其注入为:
@Inject
List<I> list;
这篇文章提出了另一种观点。但是,我不确定这是否适用于接口。您可以定义值的解释方式,但不能定义类型安全性。类型擦除:错误,因为列表中的
列表中没有任何内容被“擦除”
字段(或方法参数)声明。类型擦除不是这个答案所暗示的那样;只需查看,特别是通用声明
和参数化类型
。
<?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>