[스프링]SpEL

정태규·2023년 3월 17일
0

spring

목록 보기
6/14

SPEL(Spring Expression Language)

Expression Language는 짧고 간단한 문법을 통해 데이터나 설정 값을 얻어올 수 있게 하는 특별한 형태의 표현식에 가까운 간편한 언어이다.(그래프 접근 등 가능)

그래프 접근이란? 예를들어, school.class.teacher.name 처럼 "학교에 있는 어떤 반의 선생님 이름"과 같이 접근하는 것을 말한다.

SpEL은 그 중에서도 스프링 모든 영역에서 사용 가능한 언어 형식이다.

주로 @Value("$(config.value)")와 같은 방식을 설정값을 주입받는데 사용

SpEL의 값 평가

SpelParser는 "" 안에 들어있는 문자열을 평가(Evaluation)해서 결과 값을 만들어 낸다.

'Hello world'는 문자열 리터럴이 되며, concat이라는 메서드를 호출할 수 있다.

String 객체를 new로 생성해서 사용도 가능

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parserExpression("'Hello world'");
String message = (String) exp.getValue(); // "Hello world"

Expression expWow = parser.parseExpression("'Hello World'.concat('!')");
String messageWow = (String) expWow.getValue(); // "Hello World!"

Expression expString =
parser.parseExpression("new String('hello world').toUpperCase()");
String messageString = expString.getValue(String.class); // HELLO WORLD

하지만 실제로는 위에서처럼 SpEl을 사용하지는 않는다. 실제로는 어떻게 사용 할까?

보통은 Bean의 Property를 설정할 때 많이 사용한다.
1. 기본적으로 #{< expression String>}방식으로 property를 설정
2. application.properties(또는 application.yml)의 값을 가져올 때는 ${< property name>}방식으로 가져온다.

@Component
public class SimpleComponent{
	@Value("#{1+1}")
    int two; // 2
    
    @Value("#{2 eq 2}")
    boolean isTrue; //true
    
    @Value("${server.hostname}")
    String hostname; // www.server.com
    
    @Value("${server.hostname} eq 'www.server.com'")
    boolean isHostSame; //true
}

정리하자면
스프링에는 스프링 전용 Expression languge가 있고 Expression language는 평가식을 통해서 특정 평가식을 만들어서 결과를 Bean에 담아줄때 사용하거나
property안에 있는 특정 키값을 가져와서 값을 담아줄때 사용한다.

주로 많이 사용하는것은 application.properties에서 값을 가져올때, 혹은 운영환경과 테스트환경을 분리할때 많이 사용한다.

0개의 댓글