SpEL
객체 그래프를 조회하고 조작하는 기능을 말한다.
Unified EL과 비슷하지만, 메소드 호출을 지원하며, 문자열 템플릿 기능도 제공한다.
스프링 3.0 부터 지원.
JSP에서 봤던 Unified EL
1 2 3
| <c:if test="${sessionScope.cart.numberOfItems > 0}"> ... </c:if>
|
어떻게 사용하나
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class AppRunner implements ApplicationRunner {
@Value("#{1+1}") int value;
@Value("#{'hello' +'world'}") String greeting;
@Value ("#{1 eq1}") boolean trueOrFalse;
@Value("${my.value}") int myValue
//표현식 안에 프로퍼티를 넣음 // 프로퍼티 안에 표현식은 넣을 수 없다. //my.value는 application.properties에 정의되어있다. @Value("#{${my.value} eq 100}") int isMyValue100;
@Override public void run() throws Exception { print(value); } }
|
#은 표현식을 참고하는 방법 $는 프로퍼티를 참고하는 방법.
#{“표현식"}
${“프로퍼티"}
아래와 같이 빈도 가능하다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @Component public class Sample { private intdata = 200;
public int getData() { return data; }
public void setData(int data) { this.data = data; }
}
public AppRunner implements ApplicationRunner { @Value("#{sample.data}") int sampleData; }
|
https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-language-ref
실제로 어디서 쓰나?
@Value 애노테이션
@ConditionalOnExpression 애노테이션 : 선별적으로 빈 등록
스프링 시큐리티
- 메소드 시큐리티, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter
@Query
ExpressionParser으로 직접 활용할 수도 있다.
1 2 3 4 5 6 7 8 9 10
| public AppRunner implements ApplicationRunner {
@Override public void run() throws Exception {
ExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("2+100"); Integer value = expression.getValue(Integer.class); } }
|