<list>标签如何在spring中工作</list>

时间:2012-07-09 16:14:23

标签: java xml spring collections dependency-injection

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

我的问题是Collection是一个接口所以我无法实例化它而List也是一个接口所以我认为我们无法做到

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

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

2 个答案:

答案 0 :(得分:11)

这取决于ApplicationContext。每个实现可能会有所不同,但您可以确定结果是List。正在核实documentation

  

另一个自定义命名空间实用程序用于创建列表。第一个豆子   定义与ListFactoryBean示例相同,除了它是a   更短更容易阅读。第二个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>

检查implementation of ListFactoryBean您可以看到ArrayList是未提供特定列表类型时实例化的默认列表实现。执行此任务的代码是:

if (this.targetListClass != null) {
    result = (List) BeanUtils.instantiateClass(this.targetListClass);
}
else {
    result = new ArrayList(this.sourceList.size());
}

答案 1 :(得分:0)

对于,Spring IOC Container使用ArrayList类来创建对象。类似地它使用LinkedHashSet并且它使用LinkedHashMap。