이 글의 코드 및 정보들은 강의를 들으며 정리한 내용을 토대로 작성하였습니다.
스프링 EL이란?
-
스프링 코어단에 추가되어서
스프링과 관련된 여러 프로젝트에서 사용되는 기능이다. -
객체 그래프를 조회하고 조작하는 기능을 제공한다.
-
Unified EL과 비슷하지만
메소드 호출을 지원하며
문자열 템플릿 기능도 제공한다. -
OGNL, MVEL, JBOss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만
SpEL은 모든 스프링 프로젝트 전반에 걸쳐 사용할 EL로 만들었다. -
스프링 3.0 부터 지원한다.
문법
-
#{“표현식”}
-
${“프로퍼티”}
-
표현식 은 프로퍼티를 가질 수 있지만
프로퍼티는 표현식 을 가질 수 없다.
ex) #{ ${ my.data } + 1 } -
Reference 참고
실습
기본
- Property에 있는 값을 참조하는 것과 프로퍼티와 표현식을 사용하는 법에 대해 알아보자.
application.properties
my.name = "goodgid"
my.blog.address = "goodGid.github.io"
my.value = 123456789
AppRuner
@Component
public class AppRuner implements ApplicationRunner {
@Value("#{1 + 1}")
int value;
@Value("#{'hello ' + 'goodGid'}")
String greeting;
@Value("#{1 eq 1}")
boolean trueOrFalse;
@Value("hello") // 문자열을 입력하면 그대로 입력이 된다.
String hello;
@Value("#{'spring'}") // 문자열을 입력하면 그대로 입력이 된다.
String studyFramework;
// @Value("#{"spring"}") // "" 를 사용하면 안된다.
// String ERROR_studyFramework;
@Value("${my.name}") // property에서 값을 읽어 올 수 있다.
String name;
@Value("${my.blog.address}") // property에서 값을 읽어 올 수 있다.
String blogAddress;
@Value("#{ ${my.value} eq 123456789 }") // 표현식 안에 프로퍼티 방식
boolean valueCheck;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(value); // 2
System.out.println(greeting); // helllo goodGid
System.out.println(trueOrFalse); // true
System.out.println(hello); // hello
System.out.println(studyFramework); // spring
System.out.println(name); // "goodGid"
System.out.println(blogAddress); // "goodGid.github.io"
System.out.println(valueCheck); // true
}
}
심화 : Bean 정보 참조
- Bean에 있는 정보를 참조하는 것도 가능하다.
Object
@Component
public class Event {
private int id = 123;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
AppRuner
@Component
public class AppRuner implements ApplicationRunner {
@Value("#{event.id}")
int id;
@Override
public void run(ApplicationArguments args) throws Exception {
// Bean에 있는 정보도 참조가 가능하다.
System.out.println(id); // 123
}
}
사용되는 곳
-
@Value 애노테이션
-
@ConditionalOnExpression 애노테이션
- 스프링 시큐리티
- 메소드 시큐리티, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter
- XML 인터셉터 URL 설정
- …
- 스프링 데이터
- @Query 애노테이션
-
Thymeleaf
- 기타 등등