Spring Expression Language
Spring Expression Language
백기선님의 강의인 Spring 프레임워크 핵심 기술 편의 Expression Language
를 학습한 내용을 정리한 글
SpEL
Spring EL이란?
스프링 3.0 이후부터 지원
Spring Core에서 주로 쓰인다고 한다.
직접 SpEL을 코드로 보고 이해해보도록 하자
@Component
public class AppRunner implements ApplicationRunner{
@Value("#{1 + 1}")
int value;
@Value("#{'Hello' + 'World'}")
String greeting;
@Value("#{1 eq 1}")
boolean trueOrFalse;
@Value("${}")
...
}
Value 어노테이션은 #과 같이 쓰면 괄호 안의 값을 표현식으로 인식하고 그 결과 값을 Property에 넣어준다.
@Component
public class AppRunner implements ApplicationRunner{
@Value("${my.value}")
int myValue;
...
}
// application.properties
my.value = 100
$는 프로퍼티를 사용하는 방법인데, properties 파일 안에 있는 값을 주입받을 수 있다.
표현식 안에는 프로퍼티를 사용할 수 있지만, 반대는 불가능하다.
가령 예를 들어,
@Component
public class AppRunner implements ApplicationRunner{
@Value("#{${my.value} eq 100}")
boolean isMyValue100;
...
}
표현식 안에 프로퍼티를 넣는 것은 가능하다.
SpEL의 문법을 정리해보면
#{"표현식"}
${"프로퍼티"}
주로 쓰이는 곳은 다음과 같다.
- @Value
- @ConditionalOnExpression 어노테이션
- Spring Security에서도 사용
- 스프링 데이터에 있는 @Query 어노테이션에서도 쓰인다.
SpEL은 직접 클래스를 만들어서 사용해볼 수 있다.
아래는 그 예제
class Test{
public static void main(String[] args){
ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("2+100");
Integer value = expression.getValue(Integer.class);
System.out.println(value);
}
}
Expression Language는 해당 타입으로 변환할 때 이전시간에 배웠던 ConversionService를 사용한다.
Reference
인프런 백기선님의 스프링 프레임워크 핵심 기술 강좌