Spring Expression Language

Spring Expression Language

백기선님의 강의인 Spring 프레임워크 핵심 기술 편의 Expression Language를 학습한 내용을 정리한 글

SpEL

Spring EL이란?

스프링 3.0 이후부터 지원

Spring Core에서 주로 쓰인다고 한다.

직접 SpEL을 코드로 보고 이해해보도록 하자

@Component
public class AppRunner implements ApplicationRunner{
  @Value("#{1 + 1}")
  int value;

  @Value("#{'Hello' + 'World'}")
  String greeting;

  @Value("#{1 eq 1}")
  boolean trueOrFalse;

  @Value("${}")
  ...
}

Value 어노테이션은 #과 같이 쓰면 괄호 안의 값을 표현식으로 인식하고 그 결과 값을 Property에 넣어준다.

@Component
public class AppRunner implements ApplicationRunner{

  @Value("${my.value}")
  int myValue;
  ...

}
// application.properties
my.value = 100

$는 프로퍼티를 사용하는 방법인데, properties 파일 안에 있는 값을 주입받을 수 있다.

표현식 안에는 프로퍼티를 사용할 수 있지만, 반대는 불가능하다.

가령 예를 들어,

@Component
public class AppRunner implements ApplicationRunner{

  @Value("#{${my.value} eq 100}")
  boolean isMyValue100;
  ...

}

표현식 안에 프로퍼티를 넣는 것은 가능하다.

SpEL의 문법을 정리해보면

#{"표현식"} ${"프로퍼티"}

주로 쓰이는 곳은 다음과 같다.

  • @Value
  • @ConditionalOnExpression 어노테이션
  • Spring Security에서도 사용
  • 스프링 데이터에 있는 @Query 어노테이션에서도 쓰인다.

SpEL은 직접 클래스를 만들어서 사용해볼 수 있다.

아래는 그 예제


class Test{
  public static void main(String[] args){
      ExpressionParser parser = new SpelExpressionParser();
      Expression expression = parser.parseExpression("2+100");
      Integer value = expression.getValue(Integer.class); 
      System.out.println(value);
  }
}

Expression Language는 해당 타입으로 변환할 때 이전시간에 배웠던 ConversionService를 사용한다.

Reference

인프런 백기선님의 스프링 프레임워크 핵심 기술 강좌



© 2022. by minkuk

Powered by minkuk