복붙노트

[SPRING] Spring에서 @Value의 기본값으로 null을 설정할 수 있습니까?

SPRING

Spring에서 @Value의 기본값으로 null을 설정할 수 있습니까?

현재 @Value Spring 3.1.x 주석을 다음과 같이 사용하고 있습니다.

@Value("${stuff.value:}")
private String value;

속성이없는 경우 빈 문자열을 변수에 넣습니다. 빈 문자열 대신 기본값으로 null을 갖고 싶습니다. 물론 stuff.value 속성이 설정되지 않았을 때 오류를 피하기를 원합니다.

해결법

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

    1.PropertyPlaceholderConfigurer의 nullValue를 설정해야합니다. 예를 들어, @null이라는 문자열을 사용하고 있지만 빈 문자열을 nullValue로 사용할 수도 있습니다.

    PropertyPlaceholderConfigurer의 nullValue를 설정해야합니다. 예를 들어, @null이라는 문자열을 사용하고 있지만 빈 문자열을 nullValue로 사용할 수도 있습니다.

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <!-- config the location(s) of the properties file(s) here -->
        <property name="nullValue" value="@null" />
    </bean>
    

    이제 @null이라는 문자열을 사용하여 null 값을 나타낼 수 있습니다.

    @Value("${stuff.value:@null}")
    private String value;
    

    참고 : 컨텍스트 이름 공간은 현재 null 값을 지원하지 않습니다. 사용할 수 없습니다.

    <context:property-placeholder null-value="@null" ... />
    

    Spring 3.1.1에서 테스트 됨

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

    2.이것은 정말로 오래되었지만 Spring EL을 사용할 수 있습니다.

    이것은 정말로 오래되었지만 Spring EL을 사용할 수 있습니다.

    @Value ( "$ {stuff.value : # {null}}")

    이 질문을보십시오.

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

    3.@vorburger에게 감사드립니다.

    @vorburger에게 감사드립니다.

    @Value("${email.protocol:#{null}}")
    String protocol;
    

    다른 설정없이 문자열 값을 null로 설정합니다.

  4. ==============================

    4.나는 "null-value"에 대해 몰랐기 때문에 @nosebrain 크레디트를 주지만, 특히 프로퍼티 파일에서 null을 표현하기가 어렵 기 때문에 null 값을 사용하지 않는 것을 선호합니다.

    나는 "null-value"에 대해 몰랐기 때문에 @nosebrain 크레디트를 주지만, 특히 프로퍼티 파일에서 null을 표현하기가 어렵 기 때문에 null 값을 사용하지 않는 것을 선호합니다.

    그러나 null 값을 사용하여 null을 사용하는 대안이 있습니다. 그래서 이제까지 어떤 속성 자리 표시 자와도 작동합니다.

    public class MyObject {
    
       private String value;
    
       @Value("${stuff.value:@null}")
       public void setValue(String value) {
          if ("@null".equals(value)) this.value = null;
          else this.value = value;
       }
    }
    

    개인적으로 나는 아마 나중에 물건을 원하기 때문에 내 방식을 선호합니다. 가치는 쉼표로 구분 된 값이거나 Enum 스위치가 더 쉬울 수 있기 때문입니다. 그것도 단위 테스트를 쉽게 :)

    편집 : enums 및 null을 사용하지 않는 내 의견을 사용하여 귀하의 의견을 기반으로.

    @Component
    public class MyObject {
    
        @Value("${crap:NOTSET}")
        private Crap crap;
    
        public enum Crap {
            NOTSET,
            BLAH;
        }
    }
    

    위의 작품은 나를 위해 잘 작동합니다. 당신은 null을 피합니다. 속성 파일이 처리하기를 원하지 않는다고 명시 적으로 설정하려는 경우 (하지만 NOTSET을 기본값으로 사용하므로 지정하지 않아도됩니다).

    crap=NOTSET
    

    null은 매우 나쁘고 NOTSET과 다릅니다. 그것은 스프링 또는 유닛 테스트가 IMHO에 차이점이있는 이유를 설정하지 않았 음을 의미합니다. 나는 아마도 setter 표기법 (이전 예)을 사용하여 단위 테스트를 더 쉽게 수행 할 것입니다 (개인 변수는 단위 테스트에서 설정하기가 어렵습니다).

  5. from https://stackoverflow.com/questions/11991194/can-i-set-null-as-the-default-value-for-a-value-in-spring by cc-by-sa and MIT license