📘 Spring Expression Language (SpEL)
Spring Data Redis와 Cache 기능을 사용하면서 @Cacheable()
의 속성값으로 SpEL을 자주 사용하게 되어 정리해봅니다.
SpEL 이란?
런타임 시 객체에 대한 쿼리와 조작을 지원하는 강력한 표현 언어입니다.
- SpEL 표현식은
#
기호로 시작하며 중괄호로 묶어서 표현합니다.#{Expressions}
- 속성 값을 참조할 땐
$
기호와 중괄호로 묶어서 표현합니다.${prop.name}
- ex)
#{${prop} + 2}
📘 연산자
📕 산술 연산자
@Value("#{19 + 1}") // 20
private double add;
@Value("#{2 ^ 10}") // 1024
private double powerOf;
@Value("#{(2 + 2) * 2 + 9}") // 17
private double brackets;
📕 관계 및 논리 연산자
@Value("#{1 == 1}") // true
private boolean equal;
@Value("#{!true}") // false
private boolean notTrue;
📕 조건부(삼항) 연산자
@Value("#{some.property != null ? some.perperty : 'default'}")
private String ternary;
@Value("#{some.property != null ?: 'default'}") // 위와 동일하게 null인 경우 default 주입
private String elvis;
📕 정규식(Regex) 표현법
matches를 이용해 문자열에 정규식을 사용 가능합니다.
@Value("#{'100' matches '\\d+'}") // true
private boolean validNumericStringResult;
@Value("#{'100asdf' matches '\\d+'}") // false
private boolean invalidNumericStringResult;
📕 Spring Security 간단한 활용
@PreAuthorize, @PostAuthorize를 활용한 인가 정책 적용시에도 SpEL로 정의할 수 있습니다.
@GetMapping("/preAuthorize")
@PreAuthorize("hasRole('ROLE_USER') AND principal.username == #account.username")
'📘 Backend > Spring' 카테고리의 다른 글
Implements JWT Login (0) | 2023.04.04 |
---|---|
JWT & Sticky Session (0) | 2023.04.04 |
Security Authentication & Authorization (0) | 2023.04.04 |
Security Filter Chain & DelegatingPasswordEncoder (0) | 2023.04.04 |
Spring Security 구조 (0) | 2023.04.04 |