WebServer/Spring
[Spring] SpEL (Spring Expression Language)
gangintheremark
2023. 9. 14. 09:44
728x90
SpEL
(Spring Expression Language) 이란 런타임에 평가하는 표현식을 이용하여 빈의 프로퍼티나 생성자 인자에 값을 할당하는 간결한 방식이다. xml 파일에서 속성값을 #{표현식}
이용하여 설정
리터럴 값
<bean id="" class="">
<property name= "count" value="#{5}" />
<property name= "count" value="#{89.5}" />
<property name= "username" value="#{'홍길동'}"/>
<property name= "enabled" value="#{10>3} />
</bean>
연산
- 산술 연산자 :
+
-
*
/
%
^
- 관계 연산자 :
==
>
<
≤
≥
lt
gt
eq
le
ge
- 논리 연산자 :
and
or
not
!
- 조건 연산자 :
? :
- 정규 표현식 :
matches
value="#{1+2}"
value="#{1>2}"
빈, 메서드, property 참조
SpEL 문법으로 다른 빈을 참고할 때는 ref 대신에 value
사용
value="#{빈id값}"
value="#{빈id값.변수}"
value="#{빈id값.메서드()}"
<bean id="cat1" class="com.dto.Cat">
<property name="username" value="애용이"/>
<property name="age" value="4"/>
</bean>
<!-- SpEL을 사용하여 id로 접근 가능 -->
<bean id="p1" class="com.dto.Person">
<property name="username" value="빵빵이"/>
<property name="cat" value="#{cat1}"/>
</bean>
<!-- SpEL을 사용하여 property 및 메서드 접근 가능 -->
<bean id="cat2" class="com.dto.Cat">
<property name="cname" value="#{cat1.name}"/>
<property name="cage" value="#{cat1.getAge()}" />
</bean>
상수 및 static 메서드 참조
value="#{T(패키지명포함한클래스명).메서드()}"
<bean id="" class="">
<property name="age" value="#{T(java.lang.Math).random()*100}"/>
</bean>
리소스 번들(properties) 참조
value="#{번들의id값['key']}"
<context:annotation-config />
<util:properties id="xxx" location="classpath:com/config/application.properties" />
<bean id="cat1" class="com.dto.Cat">
<property name="name" value="#{xxx['cat.name']}"/>
<property name="age" value="#{xxx['cat.age']}"/>
</bean>
컬렉션의 selection
.?[조건식]
기준을 만족하는 행
만 포함하는 새로운 컬렉션 생성
value="#{컬렉션id값.?[조건식]}"
<util:list id="xxx">
<bean id="c1" class="com.dto.Cat" p:username="야옹이1" p:age="2" p:married="true" p:height="45.6"/>
<bean id="c2" class="com.dto.Cat" p:username="야옹이2" p:age="5" p:married="false" p:height="15.6"/>
<bean id="c3" class="com.dto.Cat" p:username="야옹이3" p:age="10" p:married="false" p:height="25.6"/>
<bean id="c4" class="com.dto.Cat" p:username="야옹이4" p:age="9" p:married="false" p:height="21.2"/>
</util:list>
<bean id="p1" class="com.dto.Person">
<property name="catList" value="#{xxx}" />
</bean>
<bean id="p2" class="com.dto.Person">
<property name="catList" value="#{xxx[1]}" />
</bean>
<bean id="p3" class="com.dto.Person">
<property name="catList" value="#{xxx.?[age lt 10]}" />
</bean>
<bean id="p4" class="com.dto.Person">
<property name="catList" value="#{xxx.?[age lt 10 and married==false]}" />
</bean>
컬렉션의 projection
컬렉션 목록에서 특정 값 .![변수명]
만 가져올 때 사용
value="#{컬렉션id값.![변수명]}"
<bean id="p1" class="com.dto.Person">
<property name="catList" value="#{xxx}" />
</bean>
<bean id="p2" class="com.dto.Person">
<property name="usernameList" value="#{xxx.![username]}" />
</bean>
<!-- 컬렉션의 selection + projection -->
<bean id="p3" class="com.dto.Person">
<property name="usernameList" value="#{xxx.?[age lt 5].![username]}" />
</bean>
728x90