Notice
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- Eclipse
- 깃허브 간단요약
- 설정
- 버튼
- Oracle
- 깃허브
- jsp
- 마이바티스
- 설치
- 자바
- jsp 내부객체
- 필터체인
- 자바스크립트
- java
- 면접
- jquery
- SESSION
- 알고리즘
- 이클립스
- EL태그
- 폼태그
- 오라클
- MySQL
- springboot
- 셋업
- 스프링
- 제이쿼리
- html
- Spring
- jstl
Archives
- Today
- Total
은은하게 코드 뿌시기
SPEL (Spring Expression Language) / 스프링 표현언어 본문
728x90
1. SPEL 이란?
SpEL(Spring Expression Language)은 스프링 프레임워크에서 제공하는 표현 언어로, 스프링 애플리케이션의 설정이나 데이터 처리와 관련된 동적인 표현식을 지원합니다. 스프링 부트는 SpEL을 통해 애플리케이션의 구성과 동작을 유연하게 설정하고 제어할 수 있습니다.
SpEL은 다양한 문법을 제공하여 런타임 시에 표현식을 평가하고 결과를 도출할 수 있습니다. 스프링 부트에서 SpEL은 주로 다음과 같은 용도로 사용될 수 있습니다:
2.SPEL 사용 용도
프로퍼티 값 참조 | application.properties 또는 application.yml과 같은 설정 파일에서 정의한 프로퍼티 값을 SpEL을 사용하여 동적으로 참조할 수 있습니다. 예를 들어, ${custom.prop.route-master}와 같이 SpEL을 사용하여 프로퍼티 값을 참조하여 URL 패턴을 설정할 수 있습니다. |
빈 간의 의존성 주입 | SpEL을 사용하여 빈 간의 의존성을 동적으로 주입할 수 있습니다. 예를 들어, @Autowired 애노테이션에 SpEL을 사용하여 빈의 조건에 따라 다른 빈을 주입할 수 있습니다. |
조건부 빈 등록 | SpEL을 사용하여 특정 조건에 따라 빈을 동적으로 등록할 수 있습니다. 예를 들어, @Conditional 애노테이션에 SpEL을 사용하여 특정 조건에 따라 빈을 등록하거나 제외할 수 있습니다. |
메소드 실행 및 데이터 처리 | SpEL을 사용하여 메소드 실행이나 데이터 처리를 동적으로 수행할 수 있습니다. 예를 들어, @Value 애노테이션에 SpEL을 사용하여 동적으로 값을 설정하거나, @Cacheable 애노테이션에 SpEL을 사용하여 캐시 키를 동적으로 생성할 수 있습니다. |
런타임 프로세싱 | SpEL을 사용하여 런타임에 동적으로 표현식을 평가하고 결과를 처리할 수 있습니다. 예를 들어, SpelExpressionParser를 사용하여 동적으로 표현식을 분석하고, StandardEvaluationContext를 사용하여 변수와 함수를 등록하여 런타임에 표현식을 평가할 수 있습니다. |
3. SPEL 문법
리터럴(Literal) | 값을 직접 표현하는 방법입니다. 예를 들어, 정수, 실수, 불리언, 문자열 등을 리터럴로 표현할 수 있습니다. 예시: 42, 3.14, true, 'hello' |
프로퍼티 참조(Property Reference) | ${} 형태로 사용되며, 설정 파일에 정의된 프로퍼티 값을 참조하는 방법입니다. 예를 들어, application.properties 파일에서 정의한 프로퍼티 값을 SpEL에서 참조할 수 있습니다. 예시: ${custom.prop.route-master} |
빈 참조(Bean Reference) | @{} 형태로 사용되며, 스프링 컨텍스트에 등록된 빈을 참조하는 방법입니다. 예를 들어, 빈의 이름을 사용하여 해당 빈을 참조할 수 있습니다. 예시: @{myBean} |
연산자(Operators) | 산술, 논리, 비교, 조건 등 다양한 연산자를 사용하여 표현식을 조합하고 계산할 수 있습니다. 예시: +, -, *, /, %, ==, !=, >, <, >=, <=, AND, OR, NOT, ? : 등 |
메소드 호출(Method Invocation) | . 연산자를 사용하여 빈의 메소드를 호출하고, 메소드의 인자를 전달할 수 있습니다. 예를 들어, 빈의 메소드를 호출하여 값을 계산하거나 메소드의 결과를 사용할 수 있습니다. 예시: @{myBean.someMethod()}, @{myBean.calculate(42)} |
인덱스(Indexing) | 리스트나 배열의 인덱스를 사용하여 특정 위치의 값을 참조할 수 있습니다. 예를 들어, 리스트의 첫 번째 항목이나 배열의 특정 인덱스의 값을 참조할 수 있습니다. 예시: @{myList[0]}, @{myArray[2]} |
프로퍼티 접근(Property Access) | 연산자를 사용하여 빈의 프로퍼티 값을 참조할 수 있습니다. 예를 들어, 빈의 프로퍼티 값을 참조하여 다른 표현식에 사용할 수 있습니다. 예시: @{myBean.propertyName} |
4. SPEL 사용예
프로퍼티 참조(Property Reference) | // application.properties 파일에 정의된 프로퍼티 값을 참조하는 예시 @Value("${custom.prop.route-master}") private String routeMaster; |
Request Mapping 설정에 사용하기 | 1. 메소드 파라미터 값 활용 @RestController public class MyController { @RequestMapping(value = "/myPath/{id}") public String myMethod(@PathVariable("id") String id) { // id 값을 활용하여 비즈니스 로직 수행 return "Hello, " + id + "!"; } } 2. 프로퍼티 값 활용 @RestController public class MyController { @Value("${my.property.path}") private String myPath; @RequestMapping(value = "#{T(com.example.MyController).getPath()}") public String myMethod() { // 프로퍼티 값인 myPath를 활용하여 비즈니스 로직 수행 return "Hello, " + myPath + "!"; } public static String getPath() { return "/myPath"; } } 3. 빈 참조 @RestController public class MyController { @Autowired private MyService myService; @RequestMapping(value = "/myPath") public String myMethod() { // myService 빈을 활용하여 비즈니스 로직 수행 return myService.getMessage(); } } @Component public class MyService { public String getMessage() { return "Hello from MyService!"; } } 4. 매핑 값 application properties 에서 받아 사용하기 @RequestMapping("${custom.prop.route-master}") public String myMethod() { // 요청 매핑 처리 로직 } |
빈 참조(Bean Reference) | 1. 빈 이름으로 참조 @Autowired private MyBean myBean; @Value("#{myBean.someProperty}") private String someProperty; |
연산자(Operators) | // SpEL을 사용하여 연산을 수행하는 예시 @Value("#{42 + 3.14}") private double result; @Value("#{myBean.propertyName == 'someValue'}") private boolean result; |
메소드 호출(Method Invocation) | // SpEL을 사용하여 빈의 메소드를 호출하는 예시 @Value("#{myBean.someMethod()}") private String result; |
조건식(Conditional Expression) | // SpEL을 사용하여 조건식을 평가하는 예시 @Value("#{myBean.propertyName != null ? myBean.propertyName : 'defaultValue'}") private String result; |
컬렉션 처리(Collection Processing) | // SpEL을 사용하여 컬렉션을 처리하는 예시 @Value("#{myList[0]}") private String firstElement; @Value("#{myMap['key']}") private String valueForKey; |
728x90
'웹 > Spring Boot' 카테고리의 다른 글
스프링 시큐리티 / Spring security 란? (0) | 2023.04.18 |
---|---|
스프링 부트 프로파일 / Springboot profile 설정! (0) | 2023.04.18 |
스프링 시큐리티 기본 설정 / springsecurity 기초 (0) | 2023.04.17 |
스프링 부트 application.properties (0) | 2023.04.17 |
@ConfigurationProperties(prefix="custom.prop") 이게뭐야 / 스프링부트 application.properties 값 받아오기/ 매핑 (0) | 2023.04.17 |
Comments