2013-07-08 54 views
0

静态列表我有一个类如下:正在初始化使用弹簧

public class SensitivityDescription { 

    private final String measureId; 
    private final ColumnType type; private final String sensName; 
    private final SensType sensType; 
    private final ServicePhase svcPhase; 
    private final AggregateFunction agFn; 
    private final String positionEnum; 

    private static List <SensitivityDescription> senRecordList = new ArrayList<SensitivityDescription>(); 

    public SensitivityDescription(String measureId, ColumnType type, 
    String sensName, SensType sensType, ServicePhase svcPhase, 
    AggregateFunction agFn, String positionEnum) { 
    super(); 
    this.measureId = measureId; 
    this.type = type; 
    this.sensName = sensName; 
    this.sensType = sensType; 
    this.svcPhase = svcPhase; 
    this.agFn = agFn; 
    this.positionEnum = positionEnum; 
} 

我需要与SensitivityDescription class.How的对象来填充static senRecordList做我的Spring XML做到这一点。

+0

可能重复[是否有可能使用Spring配置创建集合?](http://stackoverflow.com/questions/14012524/is-it-possible-to-create-a-collections-with-spring-配置) – Makoto

+0

请注意senRecordList是静态的,所以理想情况下不应该需要一个对象来填充它 – user1736924

回答

0

基于this link一切工作:

package com.sopovs.moradanen.test; 

import java.util.List; 

public class SensitivityDescription { 

private String name; 

private static List<SensitivityDescription> senRecordList; 


public SensitivityDescription(String name) { 

    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 


public static void setSenRecordList(List<SensitivityDescription> senRecordList) { 
    SensitivityDescription.senRecordList = senRecordList; 
} 

public static List<SensitivityDescription> getSenRecordList() { 
    return senRecordList; 
} 

} 

XML配置:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context"  xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:c="http://www.springframework.org/schema/c"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd 
         http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util.xsd"> 


<bean id="first" class="com.sopovs.moradanen.test.SensitivityDescription"> 
    <constructor-arg name="name" value="first" /> 
</bean> 

<bean id="second" class="com.sopovs.moradanen.test.SensitivityDescription"> 
    <constructor-arg name="name" value="second" /> 
</bean> 

<bean id="third" class="com.sopovs.moradanen.test.SensitivityDescription"> 
    <constructor-arg name="name" value="third" /> 
</bean> 


<bean 
    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="staticMethod" 
     value="com.sopovs.moradanen.test.SensitivityDescription.setSenRecordList" /> 
    <property name="arguments"> 
     <list> 
      <ref bean="first" /> 
      <ref bean="second" /> 
      <ref bean="third" /> 
     </list> 
    </property> 
</bean> 

</beans> 

和测试:思维

package com.sopovs.moradanen.test; 


import static org.junit.Assert.assertEquals; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:test.xml") 
public class SpringTest { 

@Test 
public void test() { 
    assertEquals(3, SensitivityDescription.getSenRecordList().size()); 

} 
} 
0

春路并不PL你的方法很好。
但是你可以解决这个问题。
为sensitivityDescription添加senRecordList的公共setter。 添加默认的构造函数

public class SensitivityDescription { 

    private final String measureId; 
    ... 

    private static List <SensitivityDescription> senRecordList = new ArrayList<SensitivityDescription>(); 

    public SensitivityDescription(String measureId,..) { 
    ... 
    } 
    /** new code */ 
    public SensitivityDescription() {super();} 
    public void setSenRecordList(List<SensitivityDescription> senRecordList) { 
     SensitivityDescription.senRecordList = senRecordList; 
    } 

} 

实例bean的一次,这样的列表将被注入到你的领域。

<bean class="...SensitivityDescription"> 
    <property name="senRecordList"> 
    <util:list value-type="...SensitivityDescription"> 
     <bean class="...SensitivityDescription"> 
      <constructor-arg name="name" “measureId” 
       <value>id1</value> 
        </constructor-arg> 
      <constructor-arg name="name" "sensName" 
       <value>name1</value> 
        </constructor-arg> 
       ... 
     </bean> 
     <bean class="...SensitivityDescription"> 
      <constructor-arg name="name" "measureId" 
       <value>id2</value> 
        </constructor-arg> 
      <constructor-arg name="name" "sensName" 
       <value>name2</value> 
        </constructor-arg> 
       ... 
     </bean>  
    </util:list> 
    </property> 
    </bean> 

如果这不是遗留代码,你可以改变它,我建议为这些值定义一个单例,而不是静态字段。春天会更喜欢它。