14.SpEL

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