SpEL( Spring Expression Language) ※메서드 호출과 기본 문자열 템플릿 기능
SpEL
런타임 시 객체 그래프를 조회하고 조각하는 기능을 제공.
Unified EL( $ { }> ...} 비슷하지만, 메소드 호출과 문자열 템플릿 기능 제공.
모든 스프링 프로젝트 전반에 걸쳐 사용할 EL로 만들어졌습니다.
spring 3.0 지원.
문법
- #("표현식")
- $("프로퍼티")
- 표현식안에 프로퍼티 사용 가능하지만 프로퍼티 안에 표현식 x.
- 더 많은 내용은 reference 참고.
-주석 참조-
JavaBean 프로퍼티를 호출하는 예제로 다음에서 보듯이 문자열 프로퍼티 'Bytes'를 호출할 수 있습니다.
ex)
ExpressionParser parser = new SpelExpressionParser();
// 'getBytes()' 실행
Expression exp = parser.parseExpression("'Hello World'.bytes");
byte[] bytes = (byte[]) exp.getValue();
SpEL은 표준 'dot' 표기법(예: prop1.prop2.prop3)을 사용해서 중첩된 프로퍼티와 프로퍼티의 값 설정도 지원합니다.
SpEL은 메서드 호출이나 프로퍼티 접근, 생성자 호출같은 넓은 범위의 기능을 지원합니다..
// 빈을 참고하는 것 에 대한 부분은 sample 클래스 안에 멤버변수 data를 만들고 get/set을 만든 다음 진행 한 것입니다.
SpEL의 구성.
- ExpressionParser = new sqelExpressionParserr()
ExpressionParser 인터페이스는 문자열 표현을 파싱하는 책임이 있다. 이 예제에서 문자열 표현은 따옴표로 묶인 문자열 리터럴로 표현됐다.
ex)
//Expression Parser 예제.
ExpressionParser parser=new SpelExpressionParser();
Expression expression=parser.parseExpression("2+100");
Integer value=expression.getValue(Integer.class); // expression도 컨버젼 타입을 사용하는 것.
out.println(value);
- StandardEvaluationContext context=new StandardEvaluationContext(bean)
EvaluationContext 인터페이스
프로퍼티, 메서드, 필드를 처리하고 타입변환을 수행하는 표현식을 평가할 때 EvaluationContext 인터페이스를 사용한다. 새로운 구현체 StandardEvaluationContext는 객체를 조작하려고 리플렉션을 사용하고 성능을 향상시키기 위해서 java.lang.reflect의 Method, Field, Constructor를 캐싱합니다.
타입변환
본적으로 SpEL은 스프링 코어에서 사용할 수 있는 변환 서비스를 사용합니다.
제너릭에 친화적이며 핵심 기능.(SpEL은 타입 유지를 위해 유지하려고 변환 시도.)
class Simple {
public List<Boolean> booleanList = new ArrayList<Boolean>(); } Simple simple = new Simple();
simple.booleanList.add(true);
StandardEvaluationContext simpleContext = new StandardEvaluationContext(simple);
// 여기서 false를 문자열로 전달하고 SpEL과 변환 서비스는 Boolean이 되어야 한다는 것을 인식하고 변환 합니다.
parser.parseExpression("booleanList[0]").setValue(simpleContext, "false");
Boolean b = simple.booleanList.get(0); // b는 false가 됩니다.
- Expression expression= parser.parseExpression("표현식")
- String value=expression.getvalue(context,String.class)
실제 사용
- @Value annotation
-자동연결(Autowired) 메서드나 생성자에서도 사용가능.
ex)
public class SimpleMovieLister {
private MovieFinder movieFinder; private String defaultLocale; @Autowired public void configure(MovieFinder movieFinder, @Value("#{ systemProperties['user.region'] }"} String defaultLocale) { this.movieFinder = movieFinder; this.defaultLocale = defaultLocale;
}
- @ConditionalOnExpression annotation -> SPA 지원 (ConditionalOn -> sprinf expression 기반 선별적 빈을 등록 및 설정파일을 읽는 애노테이션.)
+(SPA란 Single Page Application의 약자이다.
단일 페이지 어플리케이션(SPA)는 현재 웹개발의 트랜드이다.
기존 웹 서비스는 요청시마다 서버로부터 리소스들과 데이터를 해석하고 화면에 렌더링하는 방식이다. SPA형태는 브 라우저에 최초에 한번 페이지 전체를 로드하고, 이후부터는 특정 부분만 Ajax를 통해 데이터를 바인딩하는 방식
즉 리로드 방식과는 다르게 ajax와 같은 처리 client-> server 그리고 json형식처리를 서버 -> client 보내주는 방식.
- 스프링 시큐리티
-hasRole,hasIpaddress 메소드 함수들은 EvaluationContext에서오는것으로빈을만들어주면빈이제공하는함수사용하는 것이가능하다.
- 메소드 시큐리티를 사용,@PreAuthorize,@PostAutorize,@PreFilter,@PostFilter
- xml 에서의 URL 설정.
- 스프링 데이터 -> Query 애노테이션
'Spring > Spring_CoreTechnologies' 카테고리의 다른 글
SpringFrameWork CoreTechnition_section5_13부 (0) | 2020.11.24 |
---|---|
SpringFrameWork CoreTechnition_section5_12부 (0) | 2020.11.24 |
SpringFrameWork CoreTechnition_section1_7부 (0) | 2020.11.19 |
SpringFrameWork CoreTechnition_section1_6부 (0) | 2020.11.19 |
SpringFrameWork CoreTechnition_section1_5부 (0) | 2020.11.18 |
댓글