복붙노트

[SPRING] 동적 속성 목록을 스프링 관리 빈으로 읽기

SPRING

동적 속성 목록을 스프링 관리 빈으로 읽기

나는 검색했지만 이러한 단계를 찾을 수 없습니다. 나는 명백한 것을 놓치기를 바란다.

다음 내용이있는 속성 파일이 있습니다.

machines=A,B

나는 이와 같은 다른 파일을 가지고 있지만 다음과 같이 machines 요소에 다른 수의 멤버가 있습니다.

machines=B,C,D

내 질문은 일반적인 방법으로 내 봄 설정에 콩이 가변 길이 기계 변수를로드 할 수 있습니까?

이 같은:

<property name="machines" value="${machines}"/>

여기서 machines는 배열 또는 자바 코드의 목록입니다. 나는 그것을 정의 할 수 있지만, 만약 내가 이것을 어떻게 할 수 있는지 알고 싶다.

기본적으로 나는 스프링을 사용하여 구문 분석을하고 각 값을 목록 요소에 집어 넣지 않고 전체 컴퓨터 문자열을 읽고 (쉼표 구분 기호로) 구문 분석을 수행하여 각 값을 배열에 저장해야합니다. 또는 목록. 이 작업을 쉽게 수행 할 수있는 방법이 있습니까?

해결법

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

    1.Spring의 StringUtils 클래스를 살펴볼 수도 있습니다. 쉼표로 구분 된 목록을 Set 또는 String 배열로 변환하는 유용한 메소드가 많이 있습니다. Spring의 팩토리 메소드 프레임 워크를 사용하여 이러한 유틸리티 메소드를 사용하여 구문 분석 된 값을 bean에 삽입 할 수 있습니다. 다음은 그 예입니다.

    Spring의 StringUtils 클래스를 살펴볼 수도 있습니다. 쉼표로 구분 된 목록을 Set 또는 String 배열로 변환하는 유용한 메소드가 많이 있습니다. Spring의 팩토리 메소드 프레임 워크를 사용하여 이러한 유틸리티 메소드를 사용하여 구문 분석 된 값을 bean에 삽입 할 수 있습니다. 다음은 그 예입니다.

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

    이 예제에서 'machines'값은 특성 파일에서로드됩니다.

    기존의 유틸리티 메소드가 사용자의 요구를 충족시키지 못하면 자신 만의 유틸리티 메소드를 작성하는 것은 매우 간단합니다. 이 기술을 사용하면 정적 유틸리티 메소드를 실행할 수 있습니다.

  2. ==============================

    2.스프링 EL이 쉬워집니다. 자바:

    스프링 EL이 쉬워집니다. 자바:

    List <String> machines;
    

    문맥:

    <property name="machines" value="#{T(java.util.Arrays).asList('${machines}')}"/>
    
  3. ==============================

    3."machines"속성을 String 배열로 만들면 Spring이 자동으로 문자열 배열을 처리합니다.

    "machines"속성을 String 배열로 만들면 Spring이 자동으로 문자열 배열을 처리합니다.

    machines=B,C,D
    
    <property name="machines" value="${machines}"/>
    
    public void setMachines(String[] test) {
    
  4. ==============================

    4.Spring 3.0부터는 @Value 주석을 사용하여 값 목록을 읽을 수도 있습니다.

    Spring 3.0부터는 @Value 주석을 사용하여 값 목록을 읽을 수도 있습니다.

    속성 파일 :

    machines=B,C,D
    

    자바 코드 :

    import org.springframework.beans.factory.annotation.Value;
    
    @Value("#{'${machines}'.split(',')}")
    private List<String> machines;
    
  5. ==============================

    5.보일러 플레이트 코드없이 직접 목록에 값을 삽입 할 수 있습니다 (Spring 3.1 이상).

    보일러 플레이트 코드없이 직접 목록에 값을 삽입 할 수 있습니다 (Spring 3.1 이상).

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

    구성에 다음 두 인스턴스를 작성하여 등록 정보 파일에서 "machines = B, C, D"키를 누르십시오.

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

    그것들은 분리 된 모든 분리와 공백을 모두 다룰 것입니다.

  6. from https://stackoverflow.com/questions/5274362/reading-a-dynamic-property-list-into-a-spring-managed-bean by cc-by-sa and MIT license