스프링 EL 이란
- 객체 그래프를 조회하고 조작하는 기능을 제공한다.
- Unified EL과 비슷하지만, 메소드 호출을 지원하며, 문자열 템플릿 기능도 제공한다.
- OGNL, MVEL, JBOss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만, SpEL은 모든 스프링 프로젝트 전반에 걸처 사용할 EL로 만들었다.
- 스프링 3.0 부터 지원이 가능하다.
package com.bpkim.demospring51;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class AppRunner implements ApplicationRunner {
// # 표현식
@Value("#{1 + 1}")
int value;
@Value("#{'hello ' + 'world'}")
String greeting;
@Value("#{ 1 eq 1}")
boolean trueOrFalse;
@Value("hello")
String hello;
// $ 표현식
@Value("${my.value}")
String myValue;
// 표현식 안에선 프로퍼티 사용가능
// 프로퍼티 안에선 프로퍼티 사용 불가
@Value("#{${my.value} eq 100}")
boolean isMyValue100;
// 빈에 있는 값
@Value("#{sample.data}")
int simpleData;
@Override
public void run(ApplicationArguments args) throws Exception{
System.out.println(value);
System.out.println(greeting);
System.out.println(trueOrFalse);
System.out.println(hello);
System.out.println(myValue);
System.out.println(isMyValue100);
System.out.println(simpleData);
}
}
--------------
package com.bpkim.demospring51;
import org.springframework.stereotype.Component;
@Component
public class Sample {
private int data = 200;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
- 실행결과
** Spring Expression Language를 실제로 사용하는 곳은 ?
- @Value 애노테이션
- @ConditionalOnExpression 애노테이션
선택적으로 빈을 등록하거나, 선택적으로 빈을 읽어 들일때 사용하는 것
- Spring Security
메소드 시큐리티 , @PreAhthorize, @PostAuthorize, @PreFilter, @PostFilter
XML 인터셉터 URL 설정
>> 이러한 것은 EvaluationContext 에서 빈을 만들어주고 빈이 제공하는 것을 쓸 수 있다.
- Spring Data 의 쿼리 애노테이션
SpEL 구성
ExpressionParser parser = new SpeelExpressionParser();
StandardEvaluationContext Context = new StandardEvaluationContext(bean)
Expression expriession = parser.parserExpression("SpEL 표현식");
String value = expriession.getValue(context, String.class
- 코드로 구현
package com.bpkim.demospring51;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.stereotype.Component;
@Component
public class AppRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception{
ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("2+100");
Integer value = expression.getValue(Integer.class);
System.out.println(value);
}
}
- 실행 결과
'개발 > Spring' 카테고리의 다른 글
AOP - 프록시 기반 AOP (0) | 2021.04.27 |
---|---|
스프링 AOP - 개념 (0) | 2021.04.27 |
데이터 바인딩 추상화 Converter와 Formatter (0) | 2021.04.23 |
데이터 바인딩 추상화: PropertyEditor (0) | 2021.04.22 |
Validation 추상화 (0) | 2021.04.22 |