Spring Expression Language


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


문법

  • #{“표현식”}
  • ${“Property”}
  • 표현식 안에는 Property를 사용할 수 있지만 Property 안에 표현식은 사용할 수 없다.

#{“표현식”}


AppRunner.java

@Component
public class AppRunner implements ApplicationRunner {

    @Value("#{1 + 1}")
    int value;

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

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

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("========Application Runner========");
        System.out.println(value);
        System.out.println(greeting);
        System.out.println(trueOrFalse);
    }

}


위와 같이 ApplicationRunner에서 실행해 보면 결과는 아래와 같다.


========Application Runner========
2
HelloWorld
true


${“Property”}


Property에 있는 내용을 활용할 수 있다.

Application.properties

my.value= 100


AppRunner.java

@Component
public class AppRunner implements ApplicationRunner {

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

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

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("========Application Runner========");
        System.out.println(myValue);
        System.out.println(isMyValue100);
    }

}


위와 같이 ApplicationRunner에서 실행해 보면 결과는 아래와 같다.


========Application Runner========
100
true


! 표현식 안에는 Property를 사용할 수 있지만 Property 안에 표현식은 사용할 수 없다.


Bean의 내용을 활용


SampleBean이라는 Bean을 만든 후 Field와 Method도 읽어올 수 있다.

SampleBean.java

@Component
public class SampleBean {

    public int data = 200;

    public int getData() {
        return data;
    }

}


AppRunner.java

@Component
public class AppRunner implements ApplicationRunner {

    @Value("#{sampleBean.data}")
    int sampleBeanData;

    @Value("#{sampleBean.getData()}")
    int sampleBeanData2;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("========Application Runner========");
        System.out.println(sampleBeanData);
        System.out.println(sampleBeanData2);
    }

}


위와 같이 ApplicationRunner에서 실행해 보면 결과는 아래와 같다.


========Application Runner========
200
200


다른 문법들


사용되는 곳들…

  • @Value 애노테이션
  • @ConditionalOnExpression 애노테이션
  • Spring Security
    • 메소드 시큐리티, @PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter
    • XML 인터셉터 URL 설정
  • 스프링 데이터
    • @Query 애노테이션
  • Thymeleaf


Project Repository

  • https://github.com/Seongmun-Hong/SpringStudy


Reference

  • https://www.inflearn.com/course/spring-framework_core
Share :

Comments