4.2 빈 정의에 있는 표현식 by sh

4.2. 빈 정의에 있는 표현식

BeanDefinition인스턴스를 정의하기 위해 XML 기반 또는 Annotation 기반 구성 메타 데이터와 함께 SpEL 표현식을 사용할 수 있습니다. 두 경우 모두 표현식을 정의하는 구문은 #{ <expression string> } 형식입니다.

4.2.1. XML 구성

다음 예제와 같이 표현식을 사용하여 속성 또는 생성 자 인수 값을 설정할 수 있습니다.

<bean id="numberGuess" class="org.spring.samples.NumberGuess">
    <property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>

    <!-- other properties -->
</bean>

systemProperties변수는 미리 정의되어 있으므로 다음 예제와 같이 표현식에 사용할 수 있습니다.

<bean id="taxCalculator" class="org.spring.samples.TaxCalculator">
    <property name="defaultLocale" value="#{ systemProperties['user.region'] }"/>

    <!-- other properties -->
</bean>

이 컨텍스트에서 미리 정의된 변수 앞에 # 기호를 붙일 필요는 없습니다.

다음 예제와 같이 다른 빈 속성을 이름으로 참조할 수도 있습니다.

<bean id="numberGuess" class="org.spring.samples.NumberGuess">
    <property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>

    <!-- other properties -->
</bean>

<bean id="shapeGuess" class="org.spring.samples.ShapeGuess">
    <property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>

    <!-- other properties -->
</bean>

4.2.2. Annotation 구성

기본 값을 지정하기 위해 @Value Annotation을 필드, 메서드 및 생성 자 매개 변수에 배치할 수도 있습니다.

다음 예제에서는 필드 변수의 기본 값을 설정합니다.

public static class FieldValueTestBean

    @Value("#{ systemProperties['user.region'] }")
    private String defaultLocale;

    public void setDefaultLocale(String defaultLocale) {
        this.defaultLocale = defaultLocale;
    }

    public String getDefaultLocale() {
        return this.defaultLocale;
    }

}

다음 예제는 동등하지만 속성 설정 메서드에 대한 예제입니다.

public static class PropertyValueTestBean

    private String defaultLocale;

    @Value("#{ systemProperties['user.region'] }")
    public void setDefaultLocale(String defaultLocale) {
        this.defaultLocale = defaultLocale;
    }

    public String getDefaultLocale() {
        return this.defaultLocale;
    }

}

Autowired 메서드와 생성 자는 다음 예제와 같이 @Value Annotation을 사용할 수도 있습니다.

public class SimpleMovieLister {

    private MovieFinder movieFinder;
    private String defaultLocale;

    @Autowired
    public void configure(MovieFinder movieFinder,
            @Value("#{ systemProperties['user.region'] }") String defaultLocale) {
        this.movieFinder = movieFinder;
        this.defaultLocale = defaultLocale;
    }

    // ...
}
public class MovieRecommender {

    private String defaultLocale;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public MovieRecommender(CustomerPreferenceDao customerPreferenceDao,
            @Value("#{systemProperties['user.country']}") String defaultLocale) {
        this.customerPreferenceDao = customerPreferenceDao;
        this.defaultLocale = defaultLocale;
    }

    // ...
}

Last updated