복붙노트

[SPRING] Spring에서 값을 가진리스트를 지정하는 가장 쉬운 방법은 무엇입니까?

SPRING

Spring에서 값을 가진리스트를 지정하는 가장 쉬운 방법은 무엇입니까?

내가 봄에 생성자로 전달해야하는 등 값의 큰 목록을 가지고 있다고 가정합니다.

문자열 배열로 구성해야하는 경우 스프링에서 쉽습니다. 값을 쉼표로 구분하여 aa, bb, cc 등으로 지정할 수 있습니다.

목록으로 구성해야하는 경우 아래처럼해야합니다.

<bean name="myBean" class="MyClass">
    <constructor-arg>
        <list>
            <value>aa</value>
            <value>bb</value>
            <value>cc</value>
            <value>dd</value>
        </list>
    </constructor-arg>
</bean>

값의 수가 증가하면 거대한 라인을 차지하고 추한 것처럼 보입니다.

어떤 사람이 생성자로 string에서 큰 값을리스트로 전달할 수있는 방법을 알려 주실 수 있습니까?

해결법

  1. ==============================

    1.값이 특성 파일에서 오는 목록으로 전달됩니까? 그렇다면 다음과 같은 것을 사용할 수 있습니다.

    값이 특성 파일에서 오는 목록으로 전달됩니까? 그렇다면 다음과 같은 것을 사용할 수 있습니다.

    <bean name="myBean" class="MyClass">
       <constructor-arg>
          <bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
              <constructor-arg type="java.lang.String" value="${list.value}"/>
          </bean>
        </constructor-arg>
    </bean> 
    

    다음 .properties 파일

    list.value=aa,bb,cc,dd   
    

    그리고 그렇지 않다면 다음과 같이 직접 전달할 수 있습니다.

    <bean name="myBean" class="MyClass">
       <constructor-arg>
          <bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
              <constructor-arg type="java.lang.String" value="aa,bb,cc,dd"/>
          </bean>
        </constructor-arg>
    </bean> 
    
  2. ==============================

    2.Spring은 쉼표로 구분 된 문자열을 자동으로리스트 나 배열로 변환 할 수있다 :

    Spring은 쉼표로 구분 된 문자열을 자동으로리스트 나 배열로 변환 할 수있다 :

    public class Foo {
       public void setValueList(String[] values) { ... }
    }
    
    <bean class="Foo"
          p:valueList="a,b,c,d" />
    <bean class="Foo"
          c:_0="a,b,c,d" />
    <bean class="Foo">
         <constructor-arg><value>a,b,c,d</value></constructor-arg>
    </bean>
    

    사실 문자열에 단 하나의 값만 있고 쉼표가 없더라도 여전히 작동합니다.

    다른 응답에서 누군가 언급 한 org.springframework.util.StringUtils에 대한 호출이 필요하지 않습니다.

    생성자 args에 대한이 단어도 c 네임 스페이스를 사용하여 의 줄임말입니다 (c : _0).

  3. ==============================

    3.좀 더 간단한 것을 시도해 봄 식 언어를 사용하여 값을 목록으로 변환 할 수 있습니다.

    좀 더 간단한 것을 시도해 봄 식 언어를 사용하여 값을 목록으로 변환 할 수 있습니다.

    <bean name="myBean" class="MyClass">
        <constructor-arg value="#{T(java.util.Arrays).asList('${list.values}')}"/>
    </bean>
    
  4. ==============================

    4.쉼표로 구분 된 문자열을 인수로 사용하여 해당 문자열을 직접 값으로 분리하는 생성자를 구현할 수 있습니다.

    쉼표로 구분 된 문자열을 인수로 사용하여 해당 문자열을 직접 값으로 분리하는 생성자를 구현할 수 있습니다.

    어떤 생성자 / 속성에서 작동하는 솔루션을 원한다면, PropertyEditor 구현을 살펴보고 Spring에서이를 사용하도록 설정할 수 있습니다.

  5. ==============================

    5.최신 스프링 프레임 워크 버전 (Spring 3.1 이상)을 사용하고 있다면 SpringEL의 문자열 분할 요소가 필요하지 않습니다.

    최신 스프링 프레임 워크 버전 (Spring 3.1 이상)을 사용하고 있다면 SpringEL의 문자열 분할 요소가 필요하지 않습니다.

    PropertySourcesPlaceholderConfigurer와 DefaultConversionService를 Spring의 Configuration 클래스 (Configuration으로 주석 된 클래스)에 추가하기 만하면됩니다. 예를 들어,

    @Configuration
    public class AppConfiguration {
    
        @Bean
        public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    
        @Bean public ConversionService conversionService() {
            return new DefaultConversionService();
        }
    }
    

    수업 시간에

    @Value("${list}")
    private List<String> list;
    

    또는 원하는 경우 생성자의 매개 변수에 @Value 주석을 사용하십시오.

    마지막으로 특성 파일에서

    list=A,B,C,D,E
    

    DefaultConversionService가 없으면 필드에 값을 삽입 할 때 쉼표로 구분 된 String을 String 배열로만 가져올 수 있지만 DefaultConversionService는 몇 가지 편리한 마술을 수행하고이를 Collection, Array 등에 추가합니다 (구현을 확인하면 그것에 대해 더 알고 싶다)

    이 두 가지를 사용하면 줄 바꿈을 포함하여 중복 된 공백을 모두 처리 할 수 ​​있으므로 트리밍을 위해 추가 논리를 추가 할 필요가 없습니다.

  6. from https://stackoverflow.com/questions/11577547/what-is-the-easiest-way-to-specify-a-list-with-values-in-spring by cc-by-sa and MIT license