【问题标题】:how does the <list> tag work in spring<list> 标签在 spring 中是如何工作的
【发布时间】:2012-07-09 16:14:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java xml spring collections dependency-injection


    【解决方案1】:

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

    另一个自定义命名空间实用程序用于创建列表。第一颗豆子 定义与 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>
    

    检查implementation of ListFactoryBean 你可以看到ArrayList 是默认的列表实现,如果没有提供特定的列表类型,它就会被实例化。完成这项任务的代码是:

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

    【讨论】:

    • 对我知道它是一种列表,但在第一种情况下,我们没有将列表指定为任何特定类型,它将是哪种类型的列表?如列表标签的默认行为是什么?
    • @user1009091:注释了执行实例化的代码;)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-18
      • 2011-08-06
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 2014-02-28
      相关资源
      最近更新 更多