Spring Expression Language
- 객체 그래프를 조회하고 조작하는 기능을 제공한다.
- Unified EL과 비슷하지만, 메소드 호출을 지원하며, 문자열 템플릿 기능도 제공한다.
- OGNL, MVEL, JBOss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만, SpEL은 모든 스프링 프로젝트 전반에 걸쳐 사용할 EL로 만들었다.
- Spring 3.0 부터 지원한다.
문법
- #{“표현식”}
- ${“Property”}
- 표현식 안에는 Property를 사용할 수 있지만 Property 안에 표현식은 사용할 수 없다.
#{“표현식”}
AppRunner.java
@Component
public class AppRunner implements ApplicationRunner {
@Value("#{1 + 1}")
int value;
@Value("#{'Hello' + 'World'}")
String greeting;
@Value("#{1 eq 1}")
boolean trueOrFalse;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("========Application Runner========");
System.out.println(value);
System.out.println(greeting);
System.out.println(trueOrFalse);
}
}
위와 같이 ApplicationRunner에서 실행해 보면 결과는 아래와 같다.
========Application Runner========
2
HelloWorld
true
${“Property”}
Property에 있는 내용을 활용할 수 있다.
Application.properties
my.value= 100
AppRunner.java
@Component
public class AppRunner implements ApplicationRunner {
@Value("${my.value}")
int myValue;
@Value("#{${my.value} eq 100}")
boolean isMyValue100;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("========Application Runner========");
System.out.println(myValue);
System.out.println(isMyValue100);
}
}
위와 같이 ApplicationRunner에서 실행해 보면 결과는 아래와 같다.
========Application Runner========
100
true
! 표현식 안에는 Property를 사용할 수 있지만 Property 안에 표현식은 사용할 수 없다.
Bean의 내용을 활용
SampleBean이라는 Bean을 만든 후 Field와 Method도 읽어올 수 있다.
SampleBean.java
@Component
public class SampleBean {
public int data = 200;
public int getData() {
return data;
}
}
AppRunner.java
@Component
public class AppRunner implements ApplicationRunner {
@Value("#{sampleBean.data}")
int sampleBeanData;
@Value("#{sampleBean.getData()}")
int sampleBeanData2;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("========Application Runner========");
System.out.println(sampleBeanData);
System.out.println(sampleBeanData2);
}
}
위와 같이 ApplicationRunner에서 실행해 보면 결과는 아래와 같다.
========Application Runner========
200
200
다른 문법들
사용되는 곳들…
- @Value 애노테이션
- @ConditionalOnExpression 애노테이션
- Spring Security
- 메소드 시큐리티, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter
- XML 인터셉터 URL 설정
- …
- 스프링 데이터
- @Query 애노테이션
- Thymeleaf
- …
Project Repository
- https://github.com/Seongmun-Hong/SpringStudy
Reference
- https://www.inflearn.com/course/spring-framework_core