인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다.
SpEL
SpEL 은 Spring Expression Language 로, 스프링에서 지원하는 일종의 표현식이다.
1) 예시
예를 들면 아래 같이 사용된다.
@Value("#{1 + 1}")
int value;
결과적으로 1 + 1
의 결과가 int value
에 담긴다.
@Value("#{'hello' + ' world'}")
String greeting;
String greeting
에는 "hello world"
가 담긴다.
즉, 코드 내에서 #{...}
로 표현되는 부분들은 SpEL 이라고 보면 된다.
2) 문법
사용 문법은 다음과 같다.
#{"표현식"}
${"프로퍼티"}
- 표현식은 프로퍼티를 가질 수 있지만, 반대는 안된다.
@Value
를 사용하는 다양한 예시를 보자.
@Component
public class AppRunner implements ApplicationRunner {
// 일반적인 표현식 사용 예
@Value("#{1 + 1}")
int value;
@Value("#{'hello' + ' world'}")
String greeting;
@Value("#{1 eq 1}")
boolean trueOrFalse;
// 프로퍼티 사용 예
@Value("${my.value}")
String myValue;
@Value("#{${my.value} eq 100}")
boolean isMyValue100;
// 빈 속성 사용 예 (여기서는 Sample 이라는 빈을 사전에 정의 했음.)
@Value("#{sample.value}")
int sampleValue;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(value);
System.out.println(greeting);
System.out.println(trueOrFalse);
System.out.println(myValue);
System.out.println(isMyValue100);
System.out.println(sampleValue);
}
}
이 Runner
를 실행하면 다음과 같다.
2
hello world
true
100
true
100
이 외 @ConditionalOnExpression
등 다양한 SpEL 사용 방법은 공식 도큐먼트에 소개되어 있다.
사용되는 곳
실제로 스프링 내부의 많은 모듈들이 SpEL 을 사용한다.
강의에서 소개하는 바로는 다음과 같다.
스프링 시큐리티
스프링 데이터
@Query("select u from User u where u.age = ?#{[0]}")
Thymeleaf
'더 나은 엔지니어가 되기 위해 > 지금은 안쓰는 자바' 카테고리의 다른 글
[스프링 프레임워크 핵심 기술] AOP (0) | 2020.02.23 |
---|---|
[더 자바] 바이트 코드 조작 (0) | 2020.02.22 |
[더 자바] JVM 이해하기 (0) | 2020.02.21 |
[스프링 프레임워크 핵심 기술] 데이터 바인딩 추상화 (0) | 2020.02.21 |
[스프링 프레임워크 핵심 기술] Resource / Validation 추상화 (0) | 2020.02.21 |