[Spring] Spring Expression Language

2022. 10. 30. 15:06JAVA/Spring

1. 스프링 EL(Expression Language)이란?

  • 객체 그래프를 조회하고 조작하는 기능을 제공
  • Unified EL과 비슷하지만, 메서드 호출을 지원하며, 문자열 템플릿 기능도 제공
  • OGNL, MVEL, JBOss EL 등 자바에서 사용할 수 있는 여러 EL이 있지만, SpEL은 모든 스프링 프로젝트 전반에 걸쳐 사용할 EL로 만듬
  • 스프링 3.0부터 지원

 

SpEL 구성

  • ExpressionParser parser = new SpelExpressionParser()
  • StandardEvaluationContext context = new StandardEvaluationContext(bean)
    • EvaluationContext에 bean을 등록하면 bean이 제공하는 프로퍼티, 메서드 등을 호출할 수 있습니다.
  • Expression expression = parser.parseExpression(”SpEL 표현식”)
  • String value = expression.getValue(context, String.class)

 

문법

  • #{”표현식”}
  • ${”프로퍼티”}
  • 표현식은 프로퍼티를 가질 수 있지만, 반대는 안됨
    • ex) #{${my.data} + 1}
  • 레퍼런스 참고

 

사용 용도

  • @Value
  • @ConditionalOnExpression
    • 조건부적으로 빈 설정
  • 스프링 시큐리티
    • 메서드 시큐리티, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter
    • XML 인터셉터 URL 설정
  • 스프링 데이터
    • @Query
  • Thymeleaf

 

 

2. @Value 애노테이션 이용한 Spring EL 실습 예제

@SpringBootTest
@ActiveProfiles({"test"})
public class SpELTest {
    // #{"표현식"}, ${"프로퍼티"}
    @Value("#{1 + 1}")
    int value1;

    @Value("#{'hello ' + 'world'}")
    String greeting;

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

    @Value("hello")
    String hello;

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

    @Value("#{'spring'}")
    String spring;

    @Value("#{${my.value} + '번'}")
    String valueBun;

    @Value("#{person.age}")
    int age;

    @Test
    public void testValue1(){
        assertThat(value1).isEqualTo(2);
    }

    @Test
    public void testGreeting(){
        assertThat(greeting).isEqualTo("hello world");
    }

    @Test
    public void testOneEqualOne(){
        assertThat(oneEqualOne).isTrue();
    }

    @Test
    public void testHello(){
        assertThat(hello).isEqualTo("hello");
    }

    @Test
    public void testMyValue(){
        assertThat(myValue).isEqualTo(10);
    }

    @Test
    public void testValueBun(){
        assertThat(valueBun).isEqualTo("10번");
    }

    @Test
    public void testSpring(){
        assertThat(spring).isEqualTo("spring");
    }

    @Test
    public void testAge(){
        assertThat(age).isEqualTo(20);
    }
}

test/resources/application-test.yml

my:
  value: 10

 

References

source code : https://github.com/yonghwankim-dev/spring_study/tree/master/spring_spel/src/test/java/kr/yh
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#expressions-language-ref
[인프런] 스프링 프레임워크 핵심 기술
 

GitHub - yonghwankim-dev/spring_study

Contribute to yonghwankim-dev/spring_study development by creating an account on GitHub.

github.com