SpEL (스프링 Expression Language)

맹기·2021년 4월 14일
0

Spring 핵심 기술 원리

목록 보기
16/19

Tip : ApplicationRunner를 상속받게 되면
Springboot 어플리케이션이 실행된 다음에 아래의 run 코드를 실행 하게 됨

@Component
public class AppRunner implements ApplicationRunner {
    
    @Override
    public void run(ApplicationArguments args) throws Exception {

    }
}

1. SpEL 예시 코드 및 실습

  • AppRunner.java
@Component
public class AppRunner implements ApplicationRunner {

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

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

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

    @Value("hello")
    String hello;

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

    //표현식 안에 property를 넣음
    @Value("#{${my.value} eq 100}")
    boolean ismyValue100;

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

	//spEL은 빈을 주입받아 사용 가능함.
    @Value("#{sample.data}")
    int sampleData;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("=================");
        System.out.println(value);
        System.out.println(greeting);
        System.out.println(trueOrflase);
        System.out.println(hello);
        System.out.println(myValue);
        System.out.println(ismyValue100);
        System.out.println(spring);
        System.out.println(sampleData);

		//Expression parser를 이용하여 spEL을 사용
        //String > Integer 변환시에 저번에 배웠던 ConversionService를 사용한다.
        ExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression("2 + 100");
        Integer value = expression.getValue(Integer.class);
        System.out.println(value);
    }
}
  • application.properties
my.value = 100
  • Sample.java
@Component
public class Sample {

    private int data = 200;

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }
}

실행결과

2. 강의노트

스프링 EL 이란?

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

SpEL 구성

  • ExpressionParser parser = new SpelExpressionParser()
  • StandardEvaluationContext context = new StandardEvaluationContext(bean)
  • Expression expression = parser.parseExpression("SpEL 표현식")
  • String value = expression.getvalue(context, String.class)

문법

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

실제로 어디서 쓰나?

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

0개의 댓글