ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SPEL(스프링 Expresssion Language)
    SPRING/스프링프레임워크 핵심개념 2021. 5. 23. 22:44

    스프링 EL

    - 객체 그래프를 조회하고 조작하는 기능을 제공

    - 스프링 3.0 부터 지원

    - Unified EL과 비슷하지만, 메소드 호출을 지원하며 문자열 템플릿 기능도 제공

     

    SpEL 구성

    • ExpressionParser​​ parser = new SpelExpressionParser()
    • StandardEvaluationContext context = new Standard​ EvaluationContext​​ (bean)
    • Expression expression = parser.parseExpression(“SpEL 표현식”)
    • String value = expression.getValue(context, String.class)

    문법

    - #("표헌식")

    - ${"프로퍼티"}

    - 표현식은 프로퍼티를 가질 수 있지만, 반대는 X

      #{$(my.data} + 1}

     

    실제 사용되는 곳

    - @Value Annotation

    - @ConditionalOnExpression Annotation

    - Spring Security

    - Spring Data

    - Thymeleaf

     

    @Component
    public class AppRunner implements ApplicationRunner {
    
        @Value("#{1+1}")
        int value;
    
        @Value("#{'hello ' + 'world'}")
        String greeting;
    
        @Value("#{1 eq 1}")
        String trueOrFalse;
    
        @Value("hello")
        String hello;
    
        @Value("${my.value}")
        String myValue;
    
        @Value("#{${my.value} eq 100}")
        String isMyValue100;
    
        // Bean에 있는 값을 참조
        @Value("#{sample.data}")
        int sampleData;
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            System.out.println("==========================");
            System.out.println(value); // 2
            System.out.println(greeting); // hello world
            System.out.println(trueOrFalse); // true
            System.out.println(hello); // hello
            System.out.println(myValue); // 100 
            System.out.println(isMyValue100); // true
            System.out.println(sampleData); // 200
    
            ExpressionParser parser = new SpelExpressionParser();
            Expression expression = parser.parseExpression("2+100");
            // Expression 자체가 표현식이기 때문에 {}안에 들어갈 내용을 넣는다.
            Integer value = expression.getValue(Integer.class);
            System.out.println(value); // 102
        }
    }
    
    //application.properties
    my.value = 100
    
    @Component
    public class Sample {
      
      private int data = 200;
      
      public int getData() {
        return data;
      }
      
      public void setData(int data) {
        this.data = data;
      }
    }
Designed by Tistory.