2013-07-08 2 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; 
} 

мне нужно заполнить static senRecordList с объектами SensitivityDescription class.How мне делать это весной XML.

+0

Возможный дубликат [Возможно ли создание коллекций с конфигурацией Spring?] (Http://stackoverflow.com/questions/14012524/is-it-possible-to-create-a-collections-with-spring- configuration) – 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

весна способ мышления не мн.ч. хорошо с вашим подходом.
Но вы можете обойти это.
Добавить публичный сеттер для senRecordList для SensitivityDescription. Добавить конструктор по умолчанию

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; 
    } 

} 

Instance боб один раз, таким образом список будет введен в своей области.

<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> 

Если это не унаследованный код, и вы можете изменить его, я предлагаю определить синглтон для этих значений, а не статическое поле. Весне это понравится.

Смежные вопросы