SpEL(Spring Expression Language)에 대해서 간단하게 아라보자!

probsno·2021년 4월 17일
0

SpringCore

목록 보기
7/9
post-custom-banner

SpEL이란?

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

SpEl의 지원 기능

  • 리터럴 표현식 (Literal Expression)
  • Boolean과 관계연산자 (Boolean and Relational Operator)
  • 정규 표현식 (Regular Expression)
  • 클래스 표현식 (Class Expression)
  • 프로퍼티, 배열, 리스트, 맵에 대한 접근 지원 (Accessing properties, arrays, lists, maps)
  • 메서드 호출 (Method Invocation)
  • 관계연산자 (Relational Operator)
  • 할당 (Assignment)
  • 생성자 호출 (Calling Constructors)
  • Bean 참조 (Bean References)
  • 배열 생성 (Array Contruction)
  • 인라인 리스트/맵 (Inline List/Map)
  • 삼항 연산자 (Ternary Operator)
  • 변수 (Variables)
  • 사용자 정의 함수 (User defined functions)
  • Collections Projection
  • Collections Selection
  • Templated expression

문법

위에서 설명한 것이 정확하게 와닿진 않지만 문법을 보면 아마 쉽게 이해가 될걸?

#{"표현식"}


//결과 onePlusOne = 2 
@Value("#{1 + 1}")
int onePlusOne;

//결과 helloWorld = "hello world"
@Value("#{hello + world}")
String helloWorld;

//결과 isOne = false
@Value("#{1 eq 5}")
boolean isOne;

//결과 directValue = "Directly insert string"
@Value("Directly insert string")
String directValue;

코드에서보는 것과 같이 표현식을 사용 할 수 있다.

그리고 재밌는 것은 스프링 빈에 접근하여 프로퍼티(필드)의 값을 가지고 올 수도 있는데

import org.springframework.stereotype.Component;
 
@Component
public class Sample {
    
    private int value = 123;
 
    public int getValue() {
        return value;
    }
}
@Value("#{sample.Value}")
int sampleValue;
 
@Override
public void run(ApplicationArguments args) throws Exception {
    System.out.println(sampleValue);
}

스프링 빈의 id값을 참조해서 위와 같이 빈에 들어있는 프로퍼티 값을 가지고 올 수도 있다.

${"프로퍼티"}

이 문법은 resource/application.properties에 들어있는 값을 가지고 오기 위해서 사용된다.
직관적으로 코드로 보자면,,,

@Value("${application.name}")
String appName;

//:뒤에 오는 값은 resource/application.properties에 application.name가 없을 경우 쓰게되는 기본값임
@Value("${application.name:Default Name}")
String userName;

대체로 서버별로 다른 설정값을 사용하고 싶을때 application.properties에 값만 바꿔줘서 사용하게 된다.

profile
3개국어 쌉가능한 주니어 개발자
post-custom-banner

0개의 댓글