Spring Boot

SpEL - Spring Expression Language

iksadnorth 2023. 7. 29. 20:10

👣 개요

스프링 프레임워크에서 제공하는 표현 언어로서
XML 설정이나 어노테이션 기반의 스프링 빈 정의, 프로퍼티 파일 등에서
데이터를 참조하고 조작하는 데 사용된다.

👣 SpEL의 값 평가 - evaluation

SpelParser는 쌍따옴표 내부의 문자열을 평가해서 결과물을 출력한다.

ExpressionParser parser = new SpelExpressionParser();

Expression exp = parser.parseExpression("'Hello World'");
String message = (String) exp.getValue(); // "Hello World"

Expression exp = parser.parseExpression("'Hello World'.concat('!')");
String message = (String) exp.getValue(); // "Hello World!"

Expression exp = parser.parseExpression("new String('Hello World').toUpperCase()");
String message = exp.getValue(String.class); // "HELLO WORLD"

👣 연산식을 통한 값 주입

#{ <expression string> } 방식으로 값 주입.

@Value("#{ 1+1 }")
Object obj; // 2

@Value("#{ 2 eq 2 }")
Object obj; // true

@Value("#{ ${server.hostname} eq 'www.server.com' }")
Object obj; // true

👣 SpEL 문법

  • 리터럴 표현식
    • 숫자, 문자열, 불리언, null 등의 값을 표현합니다.
    • 예: 42, 'Hello, SPEL!', true, null
  • 빈 참조
    • 빈의 이름을 사용하여 빈을 참조합니다.
    • 예: @myBean
  • 프로퍼티 참조
    • 빈의 프로퍼티 값을 참조합니다.
    • 예: @myBean.name
  • 리스트/배열 인덱스
    • 리스트나 배열에서 요소를 인덱스로 접근합니다.
    • 예: myList[0], myArray[3]
  • 맵 키
    • 맵에서 특정 키를 사용하여 값을 가져옵니다.
    • 예: myMap['key']
  • 메서드 호출
    • 빈의 메서드를 호출하고 반환값을 사용합니다.
    • 예: @myBean.calculateSum(10, 20)
  • 연산자
    • 산술 연산자(+, -, *, /), 관계 연산자(==, !=, >, < 등), 논리 연산자(and, or, not), 삼항 연산자 등을 지원합니다.
  • 조건식
    • 삼항 연산자를 사용하여 조건에 따라 다른 값 반환합니다.
    • 예: condition ? trueValue : falseValue
  • Elvis 연산자
    • null 체크를 간단하게 수행합니다. 해당 표현식의 결과가 null이면 대체 값을 사용합니다.
    • 예: nullableValue ?: defaultValue
  • 특수 표현식
    • T 키워드를 사용하여 자바의 정적 메서드나 클래스의 상수 값을 참조합니다.
    • 예: T(java.lang.Math).PI, T(java.time.LocalDate).now()
  • 집계 함수
    • collection.{프로퍼티} 형태로 컬렉션의 프로퍼티 값을 모두 가져올 수 있습니다.
    • 예: @myList.{name}, @myList.{name.toUpperCase()}
  • 문자열 템플릿
    • 문자열 템플릿을 사용하여 문자열을 생성합니다.
    • 예: 'Hello, #{'John'}!'

 

'Spring Boot' 카테고리의 다른 글

@Transactional  (0) 2023.07.30
Lombok  (0) 2023.07.29
Spring Boot AOP  (0) 2023.07.29
Spring Boot Bean 등록 방법 5가지  (0) 2023.07.29
Spring Logging System  (0) 2023.07.29