3

可以使用构造函数从另一个集合对象创建集合对象。

 List<Student> list = new ArrayList<Student>(someStudentList);

这可以在春天完成。

     <bean id="stdArrayList" class="java.util.ArrayList">
        <constructor-arg >
            <list>
                <ref bean="student1" />
                <ref bean="student2" />
                <ref bean="student3" />
            </list>
        </constructor-arg>
    </bean>
    <bean id="student1"  class="mawia.test.Student"
     ....

我怎样才能在Spring中添加项目?

 Set<Student> set= new TreeSet<Student>();
        set.add(new Student(5, "Mawia"));
        ...

这样我就可以使用接受比较器对象的构造函数。

 Set<Student> set= new TreeSet<Student>(new MyComparator());
        set.add(new Student(5, "Mawia"));
        ...
4

3 回答 3

4

我怀疑最简单的方法是创建一个TreeSet提供两个参数的构造函数的简单子类:

public class MyTreeSet<T> extends TreeSet<T> {
  public MyTreeSet(Comparator<? super T> cmp, Collection<? extends T> coll) {
    super(cmp);
    addAll(coll);
  }
}

并将其用作 bean 的类型,将比较器和初始值都作为<constructor-arg>值传递。

<bean id="studentSet" class="com.example.MyTreeSet">
  <constructor-arg index="0">
    <bean class="com.example.MyComparator" />
  </constructor-arg>
  <constructor-arg index="1">
    <list>
      <ref bean="student1" />
      <ref bean="student2" />
      <ref bean="student3" />
    </list>
  </constructor-arg>
</bean>

或者,TreeSet您可以编写自己的FactoryBean.

要在不编写任何额外代码的情况下做到这一点,您可以使用第二个 bean 定义来添加

<bean id="studentSet" class="java.util.TreeSet">
  <constructor-arg>
    <bean class="com.example.MyComparator" />
  </constructor-arg>
</bean>

<bean id="studentSetFiller" factory-bean="studentSet" factory-method="addAll">
  <constructor-arg>
    <list>
      <ref bean="student1" />
      <ref bean="student2" />
      <ref bean="student3" />
    </list>
  </constructor-arg>
</bean>

但是随后您注入的任何其他 bean 都studentSet需要额外depends-on="studentSetFiller"的,以确保在目标 bean 尝试使用它之前填充该集合。

于 2013-04-05T11:27:26.373 回答
1

您可能可以使用这样的util模式来做到这一点;

<util:set id="emails" set-class="java.util.TreeSet">
    <value>pechorin@hero.org</value>
    <value>raskolnikov@slums.org</value>
    <value>stavrogin@gov.org</value>
    <value>porfiry@gov.org</value>
</util:set>

(取自http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/xsd-config.html#xsd-config-body-schemas-util-set

我将测试是否可以添加构造函数参数并确认。

于 2013-04-05T11:22:09.867 回答
0

TreeSet 不提供组合构造函数来传递 Comparator 以及数据。所以我想你只能通过构造函数注入来做一个。

其他部分如果暴露,您应该尝试通过属性注入。

于 2013-04-05T11:24:11.667 回答