본문 바로가기

Develop/Spring

Spring SpEL

728x90

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

  • SpEL은 스프링 모든 영역에서 사용 가능한 표현 언어입니다.

 

스프링에서 주로 많이 활용되는 부분

@Value("${config.value}"} 와 같은 방식으로 설정 값을 주입 받는데 활용됩니다.

 

SpEL의 값 평가(evaluation)

  • SpelParser는 "" 안에 들어있는 문자열을 평가(evaluation)해서 결과 값을 만들어냅니다.
  • 'Hello World'는 문자열 리터럴이 되며 concat 메서드도 호출할 수 있습니다.
  • String 객체를 new로 생성해서 사용도 가능합니다.
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'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.parseException("new String('hello world').toUpperCase()");
String messageString = expString.getValue(String.class); // "HELLO WORLD"

Bean의 Property를 설정할 때 사용하는 방식

위의 SpelParser를 이용하는 방식은 잘 사용하지 않고

Bean의 Property 방식을 주로 사용합니다.

Annotation을 사용한 방식을 사용하기 위해서는 Spring 에서 지원해주는 것이기 때문에

Bean으로서 등록이 필요합니다.

 

  • 기본적으로 #{ <expression string> } 방식으로 property를 설정
  • 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
}

'Develop > Spring' 카테고리의 다른 글

Spring MVC  (0) 2022.11.17
(작성 중) Spring web.xml  (0) 2022.11.16
Spring DataBinding  (0) 2022.11.16
Spring Validation  (0) 2022.11.16
Spring AOP  (0) 2022.11.16