본문 바로가기
Java, Kotlin, Spring/Spring, Spring Boot

Spring - spEL(스프링 Expression Language)

by Wordbe 2021. 1. 13.
728x90

Spring - spEL, 스프링 표현어

 

스프링 EL(Expression Language) 란 객체 그래프를 조회하고 조작하는 기능을 제공하는 언어를 말한다.

spEL은 모든 스프링 프로젝트에서 사용하는 expression language로 만들었다.

문법이나 규칙은 배우기가 쉽다.

  • #{"표현식"}

  • ${"프로퍼티"}

  • 이런식으로 특정 객체를 가져와서 문자열처럼 사용할 수 있고, 계산도 할 수 있다. 표현식은 프로퍼티를 포함할 수 있지만, 반대로는 불가능하다.

    가령 #{blue.data} + 1 은 가능하다.

 

어디에 사용되는가

  • @Value 애노테이션 안에 spEL을 쓰면, 아래 필드값에 결과가 주입된다.
  • @ConditionalOnExpression 어노테이션에서도 사용된다.
  • 스프링 시큐리티의 경우 메소드 시큐리티, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter, XML 인터셉터 URL 설정 등에 사용된다.
  • 스프렝 데이터에서 @Query 에 사용된다.
  • 화면을 만드는 템플릿엔진인 타임리프(thymeleaf) 등에서도 사용된다.

 

간단히 예제를 보자.


  
package me.wordbe.springgoahead;
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 {
@Value("#{1 + 1}")
int value;
@Value("#{'안녕 ' + 'red'}")
String greeting;
@Value("#{1 eq 1}")
boolean yn;
@Value("red")
String red;
// application.properties (프로퍼티) 에서 blue.value 변수를 가져온다.
@Value("${blue.value}")
int blueValue;
// Sample 객체의 data 필드 값을 가져온다.
@Value("#{sample.data}")
int sampleData;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(value);
System.out.println(greeting);
System.out.println(yn);
System.out.println(red);
System.out.println(blueValue);
System.out.println(sampleData);
// 아래와 같이 SpelExpressionParser 를 직접 사용할 수도 있다.
ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression("10 + 20");
Integer value = expression.getValue(Integer.class);
System.out.println(value); // 30
}
}

 

 

 

 

 

 

728x90

'Java, Kotlin, Spring > Spring, Spring Boot' 카테고리의 다른 글

Spring - null-safety  (3) 2021.01.13
Spring - AOP(관점지향 프로그래밍)  (4) 2021.01.13
Spring - 데이터 바인딩  (4) 2021.01.13
Spring - Validation  (4) 2021.01.12
Spring - ResourceLoader  (64) 2021.01.12

댓글