SpEL은 스프링에서 제공하는 표현 언어로 일반적으로 @Value 어노테이션과 함께 프로퍼티나 리소스를 접근하는데에 주로 사용돼요. 이 밖에도 생각보다 더 많은 기능을 제공해서 잘 활용하면 코드 복잡도를 크게 낮출 수 있어요.
SpEL의 주요 기능
- 객체 그래프 접근
- 값 할당
- 메서드 호출
- 연
- 조건문
- 정규 표현식
- 빈 참조
- 리터럴 표현식
SpEL은 @Value, @ConditionalOnExpression, 스프링 시큐리티, 스프링 데이터에서 많이사용되고 #{표현식} 처럼 사용 돼요. 몇 가지 예시를 볼게요.
@Component
public class MyService {
@Value("#{T(java.lang.Math).random() * 100}") // 정적 메서드 호출
private double randomNumber;
@Value("#{myBean.name}") // 빈 참조
private String name;
@Value("#{myBean.getAge() > 20 ? 'Adult' : 'Young'}") // 삼항 연산자
private String ageGroup;
@Value("#{myList[0]}") // 리스트 요소 접근
private String firstItem;
@Value("#{myMap['key']}") // 맵 요소 접근
private String value;
...
}
SpEL 안에는 프로퍼티도 사용할 수 있어요. (프로퍼티 안에서는 표현식은 사용 불가)
@Value("#{${my.data} + 1}") // 빈 참조
private int data ;
SpEL은 강력하고 다양한 기능을 제공하지만 너무 복잡한 표현식을 사용하면 가독성과 성능을 저하시킬 수 있어요. 표현식이 최대한 간결하고 명확할 때 사용하는 것이 바람직해요.