SpEL (Spring Expression Language
런타임 시간에 작동하는 강력한 표현 언어로, Spring 하위 프로젝트에서 주로 사용된다.
구성
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("5 * 5");
int expVal = exp.getValue(Integer.class);
System.out.println(expVal);
주요 문법
-
${"property_name"}
$
로 시작하며, property 값을 읽어올 수 있다.
-
#{"expression"}
-
#
로 시작하며, 1+1(덧셈), 1 eq 1(참/거짓 판별) 등 표현식을 사용하여 나타낼 수 있다. -
expression은 property를 참조할 수 있다.
#{"${hello} world"}
를 사용하면 ${hello}가 해석된 뒤 world를 붙이는 식이다.
-
사용처
@Value
@ConditionalOnExpreesion
- Spring Security
@PostFilter
등 설정에 사용하는 Annotation- XML 설정
- Spring data
@Query
사용 예시
Spring Boot 프로젝트를 생성하고 코드를 작성한다.
- AppRunner
@Component
public class AppRunner implements ApplicationRunner {
@Value("#{1 + 1}") // #{} 표현식 1
private int val1;
@Value("#{1 * 2}") // #{} 표현식 2
private int val2;
@Value("#{1 eq 1}") // #{} 표현식 3
private boolean val3;
// property 불러오기
// hello가 없으면 : 뒤에 있는 요소를 default값으로 인식
@Value("${hello:default hello}")
private String hello;
// #{} 내부에 ${} 사용하기
@Value("#{'${hello} world'}")
private String helloWorld;
@Override
public void run(ApplicationArguments args) throws Exception {
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("5 * 5");
int expVal = exp.getValue(Integer.class);
System.out.println(expVal);
System.out.println(val1);
System.out.println(val2);
System.out.println(val3);
System.out.println(hello);
System.out.println(helloWorld);
}
}
전체 소스코드
https://github.com/dhmin5693/Spring-core-study/tree/master/SpEL
'Java > Spring framework' 카테고리의 다른 글
Spring framework 소스 코드 읽어보기 - Bean 생성 원리 (2) (1) | 2020.01.27 |
---|---|
Spring framework core (12) - Spring AOP (0) | 2020.01.24 |
Spring framework core (10) - Data binding (0) | 2020.01.17 |
Spring framework core (9) - Validation (0) | 2020.01.15 |
Spring framework core (8) - Resource (0) | 2020.01.15 |