[Spring] Spring Expression Language
2022. 10. 30. 15:06ㆍJAVA/Spring
1. 스프링 EL(Expression Language)이란?
- 객체 그래프를 조회하고 조작하는 기능을 제공
- Unified EL과 비슷하지만, 메서드 호출을 지원하며, 문자열 템플릿 기능도 제공
- OGNL, MVEL, JBOss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만, SpEL은 모든 스프링 프로젝트 전반에 걸쳐 사용할 EL로 만듬
- 스프링 3.0부터 지원
SpEL 구성
- ExpressionParser parser = new SpelExpressionParser()
- StandardEvaluationContext context = new StandardEvaluationContext(bean)
- EvaluationContext에 bean을 등록하면 bean이 제공하는 프로퍼티, 메서드 등을 호출할 수 있습니다.
- Expression expression = parser.parseExpression(”SpEL 표현식”)
- String value = expression.getValue(context, String.class)
문법
- #{”표현식”}
- ${”프로퍼티”}
- 표현식은 프로퍼티를 가질 수 있지만, 반대는 안됨
- ex) #{${my.data} + 1}
- 레퍼런스 참고
사용 용도
- @Value
- @ConditionalOnExpression
- 조건부적으로 빈 설정
- 스프링 시큐리티
- 메서드 시큐리티, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter
- XML 인터셉터 URL 설정
- …
- 스프링 데이터
- @Query
- Thymeleaf
- …
2. @Value 애노테이션 이용한 Spring EL 실습 예제
@SpringBootTest
@ActiveProfiles({"test"})
public class SpELTest {
// #{"표현식"}, ${"프로퍼티"}
@Value("#{1 + 1}")
int value1;
@Value("#{'hello ' + 'world'}")
String greeting;
@Value("#{1 eq 1}")
boolean oneEqualOne;
@Value("hello")
String hello;
@Value("${my.value}")
int myValue;
@Value("#{'spring'}")
String spring;
@Value("#{${my.value} + '번'}")
String valueBun;
@Value("#{person.age}")
int age;
@Test
public void testValue1(){
assertThat(value1).isEqualTo(2);
}
@Test
public void testGreeting(){
assertThat(greeting).isEqualTo("hello world");
}
@Test
public void testOneEqualOne(){
assertThat(oneEqualOne).isTrue();
}
@Test
public void testHello(){
assertThat(hello).isEqualTo("hello");
}
@Test
public void testMyValue(){
assertThat(myValue).isEqualTo(10);
}
@Test
public void testValueBun(){
assertThat(valueBun).isEqualTo("10번");
}
@Test
public void testSpring(){
assertThat(spring).isEqualTo("spring");
}
@Test
public void testAge(){
assertThat(age).isEqualTo(20);
}
}
test/resources/application-test.yml
my:
value: 10
References
source code : https://github.com/yonghwankim-dev/spring_study/tree/master/spring_spel/src/test/java/kr/yh
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#expressions-language-ref
[인프런] 스프링 프레임워크 핵심 기술
'JAVA > Spring' 카테고리의 다른 글
[Spring] 프록시 기반 AOP (0) | 2022.10.30 |
---|---|
[Spring] Spring AOP(Aspect-Oriented Programming) 개념 (0) | 2022.10.30 |
[Spring] 데이터 바인딩 추상화 : Converter와 Formatter (0) | 2022.10.30 |
[Spring] 데이터 바인딩 추상화 : PropertyEditor (0) | 2022.10.28 |
[Spring] Validation 추상화 (0) | 2022.10.28 |