programing

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

minecode 2023. 2. 3. 20:51
반응형

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

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

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

Atribute가 존재하지 않는 경우 빈 String이 변수에 추가됩니다.빈 문자열 대신 null을 기본값으로 하고 싶습니다.물론 property stuff.value가 설정되어 있지 않은 경우에도 오류를 피하고 싶습니다.

이것은 매우 오래된 것입니다만, 지금은 Spring EL을 사용할 수 있습니다.

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

이 질문을 보세요.

@vorburger 덕분에:

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

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

PropertyPlaceholderConfigr의 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" ... />

스프링 3.1.1로 테스트 완료

"null-value"에 대해 몰랐기 때문에 @nosebrain에게 공로를 인정하지만, 특히 표현하기 어렵기 때문에 null 값을 모두 사용하는 것은 피하고 싶다.null속성 파일에 있습니다.

하지만 여기 null과 out을 사용하는 대안이 있습니다.null-value부동산 플레이스 홀더와 함께 사용할 수 있습니다.

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

개인적으로 나는 내 방식을 선호한다 왜냐하면 아마도 나중에 당신이 원하기 때문이다.stuff.value콤마 구분값으로 하거나 Enum으로 하는 것이 스위치를 쉽게 할 수 있습니다.유닛 테스트도 간단합니다.

편집: Enum 사용에 대한 귀하의 의견과 null을 사용하지 않겠다는 제 의견을 바탕으로 합니다.

@Component
public class MyObject {

    @Value("${crap:NOTSET}")
    private Crap crap;

    public enum Crap {
        NOTSET,
        BLAH;
    }
}

저는 위의 내용으로 괜찮습니다.null을 피합니다.속성 파일이 처리하지 않으려는 것을 명시적으로 설정할 경우 처리합니다(단, 기본적으로 NOTSET로 설정되므로 지정할 필요도 없습니다).

crap=NOTSET

null매우 나쁘고 다르다NOTSET스프링이나 유닛 테스트에서 설정되지 않았다는 의미이므로 IMHO의 차이가 있습니다.단위 테스트에서는 개인 변수를 설정하기 어렵기 때문에 세터 표기법(이전 예)을 사용할 수 있습니다.

빈(0길이) 문자열을 @Value default로 삽입해야 할 경우 다음과 같이 SPEL(스프링 표현 언어)을 사용합니다.

@Value("${index.suffix:#{''}}") 
private String indexSuffix;

#{'}는 삽입된 @Value의 기본값으로 빈 문자열을 가져옵니다.

일년까지

언급URL : https://stackoverflow.com/questions/11991194/can-i-set-null-as-the-default-value-for-a-value-in-spring

반응형