5

我有一个收藏工具;在我的 SomeClass.java 中,我在我的 temp.xml 文件中声明了 SomeClass.java 类的 bean。在 xml 中,我将两个字符串对象添加到集合中。

我的问题是 Collection 是一个接口,所以我不能实例化它, List 也是一个接口,所以我认为我们做不到

 Collection<String> someCollection = new List<String>();

我想知道当我们在xml文件中使用list标签时java代码是如何工作的。意味着对象是否存储在链表或数组列表或某种类型的列表中?

4

2 回答 2

11

这取决于ApplicationContext. 每个实现都可能不同,但您可以确定结果是List. 编码文档

另一个自定义命名空间实用程序用于创建列表。第一个 bean 定义与 ListFactoryBean 示例相同,只是它更短且更易于阅读。第二个 bean 定义是相同的,只是它使用 list-class 属性来指定要使用的 List 实现。当不使用 list-class 属性时,ApplicationContext 将选择实现类。

<util:list id="messageUtilList">
    <ref bean="stringMessage01"/>
    <ref bean="stringMessage02"/>
    <value>Spring is fun to learn.</value>
</util:list>

<util:list id="messageUtilLinkedList" 
           list-class="java.util.LinkedList">
    <ref bean="stringMessage01"/>
    <ref bean="stringMessage02"/>
    <value>Spring is fun to learn.</value>
</util:list>

检查你的实现ListFactoryBean可以看到ArrayList如果没有提供特定的列表类型,这是默认的列表实现。执行此任务的代码是:

if (this.targetListClass != null) {
    result = (List) BeanUtils.instantiateClass(this.targetListClass);
}
else {
    result = new ArrayList(this.sourceList.size());
}
于 2012-07-09T16:20:43.777 回答
0

对于,Spring IOC Container 使用 ArrayList 类来制作对象。同样,它使用 LinkedHashSet 和 LinkedHashMap。

于 2017-01-30T21:14:31.237 回答