개발강의정리/Spring

[스프링 프레임워크 핵심 기술] 5-1. SpEL-스프링 Expression Language

nineDeveloper 2019. 10. 6.
728x90

스프링 프레임워크 핵심 기술

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-core-tech/tree/chap05-01-spel

 

freespringlecture/spring-core-tech

백기선님의 스프링 프레임워크 핵심 기술 강의 내용 정리. Contribute to freespringlecture/spring-core-tech development by creating an account on GitHub.

github.com

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/spring-framework_core/dashboard

 

스프링 프레임워크 핵심 기술 - 인프런

이번 강좌는 스프링 부트를 사용하며 스프링 핵심 기술을 학습합니다 따라서 스프링 부트 기반의 프로젝트를 사용하고 있는 개발자 또는 학생에게 유용한 스프링 강좌입니다. 초급 웹 개발 Java Spring 온라인 강의

www.inflearn.com

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

5-1. SpEL (스프링 Expression Language)

스프링 EL​이란?

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions

 

Core Technologies

For a fallback match, the bean name is considered a default qualifier value. Thus, you can define the bean with an id of main instead of the nested qualifier element, leading to the same matching result. However, although you can use this convention to ref

docs.spring.io

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

SpEL 구성

  • ExpressionParser​​ parser = new SpelExpressionParser()
  • StandardEvaluationContext context = new Standard​EvaluationContext​​(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
  • ...

예제

@Component
public class AppRunner implements ApplicationRunner {

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

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

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

    @Value("hello")
    String hello;

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

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

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

    @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(trueOrFalse);
        System.out.println(hello);
        System.out.println(myValue);
        System.out.println(isMyValue100);
        System.out.println(spring);
        System.out.println(sampleData);

        ExpressionParser parser = new SpelExpressionParser();
        // 이미 Expression이므로 {} 없이 그냥 작성하면
        Expression expression = parser.parseExpression("2 + 100");
        // 해당하는 타입으로 변환할 때 Conversion 서비스를 사용함
        Integer value = expression.getValue(Integer.class);
        System.out.println(value);
    }
}
728x90

댓글

💲 추천 글