Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring中使用占位符处理对象列表_Java_Spring - Fatal编程技术网

Java 如何在Spring中使用占位符处理对象列表

Java 如何在Spring中使用占位符处理对象列表,java,spring,Java,Spring,我有一个目标,就是计数器 public class Counter{ private String counterGroup; private String counterName; private String counterValue; //getters & setters } public class Task{ private String taskName; private List<Counter> count

我有一个目标,就是计数器

public class Counter{
    private String counterGroup;
    private String counterName;
    private String counterValue;

    //getters & setters
}

public class Task{
    private String taskName;
    private List<Counter> counters;

    //getters & setters
}
如果我有更多的计数器,那么我必须编辑属性和spring.xml文件。由于我不熟悉Spring和Java,我认为这不是解决这个问题的正确方法


有人能提出一种不同的方法来解决同一问题吗。

好吧,这可能就是要使用的方法。但是,如果使用工厂方法和对象生成器,则可以使应用程序看起来更好。例如:

public class Counter {
    .......
    public static Counter createFor(String descriptor){
        String[] params = descriptor.split(":");
        return new Counter(params[0], params[1], params[2]);
    } 
}
你的背景:

<bean id="task" class="com.test.Task">
        <property name="taskName" value="${task.name}"/>
        <property name="counters">
        <list>
            <bean class="com.test.Counter" factoryMethod="createFor">
                 <constructor-arg ref="${counter.descriptor1}"/>
            </bean>
            <bean class="com.test.Counter" factoryMethod="createFor">
                 <constructor-arg ref="${counter.descriptor2}"/>
            </bean>
        </list>
</bean>

当然,您不受此限制,可以升级或应用任何类似的设计技术。

AFAIK,这是使用的方法。如果需要为计数器类的属性设置不同的值,则需要创建它的两个实例。因此,与原始解决方案相比,主要方法是消除应用程序的复制粘贴片段
public class Counter {
    .......
    public static Counter createFor(String descriptor){
        String[] params = descriptor.split(":");
        return new Counter(params[0], params[1], params[2]);
    } 
}
<bean id="task" class="com.test.Task">
        <property name="taskName" value="${task.name}"/>
        <property name="counters">
        <list>
            <bean class="com.test.Counter" factoryMethod="createFor">
                 <constructor-arg ref="${counter.descriptor1}"/>
            </bean>
            <bean class="com.test.Counter" factoryMethod="createFor">
                 <constructor-arg ref="${counter.descriptor2}"/>
            </bean>
        </list>
</bean>
task.name=task1
counter.descriptor1=g1:n1:v1
counter.descriptor2=g2:n2:v2