티스토리 뷰

 

| 스프링 Expression Language : SpEL

 

● 객체 그래프를 조회하고 조작하는 기능을 제공한다.
● 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 표현

 

 

@Component
public class AppRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {

 

        ExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression("2 + 100");
        Integer value = expression.getValue(Integer.class);
        System.out.println(value);
    }
}

//실행결과
102

 

 

@Value 어노테이션과 SpEL

 

SpEL은 @Value 어노테이션과 같이 쓰일 수 있으며 이 어노테이션과 SpEL의 조합을 통해서 쉽게 데이터를 바인딩할 수 있다. 아래는 그에 관련된 예시다. 

# application.properties
my.val=100

@Component
public class Sample {

    private int data = 200;

    public int getData() {
        return data;
    }

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

 

@Component
public class AppRunner implements ApplicationRunner {

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

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

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

    @Value("you are great")
    String great;

    @Value("${my.val}") // 프로퍼티 값 읽어올 수 있음
    String myName;

    @Value("#{${my.val} eq 100}") // 프로퍼티 값과의 비교 가능
    boolean isMyNameSaelobi;

    @Value("#{sample.data}") // Bean으로 등록된 객체 참조 가능
    int sampleData;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("==============");
        System.out.println(value);
        System.out.println(hello);
        System.out.println(trueOrFalse);
        System.out.println(great);
        System.out.println(myName);
        System.out.println(isMyNameSaelobi);
        System.out.println(sampleData);
    }
}

 

프로퍼티를 사용해서 myvalue에  있는 값을 주입받을 수 있다.

 

문법
● #{“표현식"}
● ${“프로퍼티"}
● 표현식은 프로퍼티를 가질 수 있지만, 반대는 안 됨.
       ->○ #{${my.data} + 1}

 

표현식 안에는 프로퍼티를 사용할 수 있지만 프로퍼티 안에서는 표현식을 사용할 수 없다.

 

ex)@Value("#${my.val} eq 100")

->표현식 안에 프로퍼티를 넣은예

 

 

실제로 어디서 쓰나?


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

 

 

'Spring' 카테고리의 다른 글

[Spring]GET,POST,PUT,DELE란?  (0) 2020.02.10
[Spring]AOP(Aspect Oriented Programming)란?  (0) 2020.01.16
[Spring] Lombok 이란?  (0) 2020.01.14
[Spring]Resource 추상화  (0) 2020.01.14
[Spring] DataBinding추상화,Converter,Formatter란?  (0) 2020.01.14