Spring spel表達(dá)式使用方法示例
spring in action第三版讀書(shū)筆記
spring3.0引入了spring expression language(spel)語(yǔ)言,通過(guò)spel我們可以實(shí)現(xiàn)
1.通過(guò)bean的id對(duì)bean進(jìn)行引用
2.調(diào)用方法以及引用對(duì)象中的屬性
3.計(jì)算表達(dá)式的值
4.正則表達(dá)式的匹配
5.集合的操作
spel最終的目標(biāo)是得到表達(dá)式計(jì)算之后的值,這些表達(dá)式可能是列舉的一些值,引用對(duì)象的某些屬性,或者是類(lèi)中的某些常量,復(fù)雜的spel表達(dá)式通常都是由一些簡(jiǎn)單的元素構(gòu)成的。最簡(jiǎn)單的僅僅是得到一些給出元素的值,例如:
<property name="count" value="the value is #{5}"/>。這種情況貌似很傻,根本就不需要用到spel,但是復(fù)雜的表達(dá)式都是由簡(jiǎn)單的構(gòu)成的
對(duì)其他bean的引用
通過(guò)spel我們也可以對(duì)context中其他的bean進(jìn)行引用
<property name="instrument" value="#{saxophone}"/>
等同于
<property name="instrument" ref="saxophone"/>
引用另外一個(gè)id為saxophone的bean作為instrument的值
對(duì)其他bean中某個(gè)屬性的引用
<bean id="carl" class="com.springinaction.Instrumentalist"> <property name="song" value="#{kenny.song}"/> </bean>
取id為kenny的bean的song字段的作為song的value
對(duì)其他bean中某個(gè)方法的引用
<property name="song" value="#{songSelector.selectSong().toUpperCase()}"/>
調(diào)用id為songSelector的bean的selectSong()方法,使用其返回值作為song的值,這也帶來(lái)一個(gè)問(wèn)如果selectSong()方法返回一個(gè)null,那么會(huì)拋出一個(gè)空指針異常
<property name="song" value="#{songSelector.selectSong()?.toUpperCase()}"/>,表達(dá)式(?.)可以確保在selectSong()返回不為空的情況下調(diào)用toUpperCase()方法,如果返回空那么不繼續(xù)調(diào)用后面的方法
對(duì)類(lèi)進(jìn)行引用
如果某個(gè)類(lèi)是外部類(lèi),而不是spring中定義的bean,那么怎么進(jìn)行引用呢?
使用表達(dá)式T(),例如:
<property name="randomNumber" value="#{T(java.lang.Math).random()}"/>
spel計(jì)算表達(dá)式的值
spel表達(dá)式支持各種各樣的運(yùn)算符,我們可以可以運(yùn)用這些運(yùn)算符來(lái)計(jì)算表達(dá)式的值
使用spel從集合中篩選元素:
使用spring的util namespace中的元素<util:list>定義一個(gè)集合
<util:list id="cities"> <bean class="com.habuma.spel.cities.City" p:name="Chicago" p:state="IL" p:population="2853114"/> <bean class="com.habuma.spel.cities.City" p:name="Atlanta" p:state="GA" p:population="537958"/> <bean class="com.habuma.spel.cities.City" p:name="Dallas" p:state="TX" p:population="1279910"/> <bean class="com.habuma.spel.cities.City" p:name="Houston" p:state="TX" p:population="2242193"/> </util:list>
使用spel對(duì)集合進(jìn)行篩選
<property name="chosenCity" value="#{cities[2]}"/>,
[]操作符也可以對(duì)Map進(jìn)行篩選,假設(shè)citis是一個(gè)Map類(lèi)型<property name="chosenCity" value="#{cities["keyName"]}"/>
[]對(duì)Properties類(lèi)型進(jìn)行操作
<util:properties id="settings"
location="classpath:settings.properties"/>使用<util:properties>標(biāo)簽讀取一個(gè)properties文件
<property name="accessToken" value="#{settings['twitter.accessToken']}"/>
基于某個(gè)屬性對(duì)集合中的元素進(jìn)行過(guò)濾 <property name="bigCitis" value="#{cities.?[population gt 10000]}"/>選中人口大一10000的cities中的元素作為bigCitis的值,同操作符(.?[])類(lèi)似, 操作符(.^[]選取滿(mǎn)足要求的第一個(gè)元素, .$[]選取滿(mǎn)足要求的最后一個(gè)) 選中已有集合中元素的某一個(gè)或幾個(gè)屬性作為新的集合 <property name="cityNames" value="#{cities.![name + ", " + state]}"/>
總結(jié)
以上就是本文關(guān)于Spring spel表達(dá)式使用方法示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。
- Spring中@Value使用詳解及SPEL表達(dá)式
- 詳解Spring中Spel表達(dá)式和el表達(dá)式的區(qū)別
- SpringDataElasticsearch與SpEL表達(dá)式實(shí)現(xiàn)ES動(dòng)態(tài)索引
- Spring AOP如何在注解上使用SPEL表達(dá)式注入對(duì)象
- spring之SpEL表達(dá)式詳解
- 使用Springboot自定義注解,支持SPEL表達(dá)式
- 基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯
- Spring?Cache抽象-使用SpEL表達(dá)式解析
- Spring實(shí)戰(zhàn)之Bean定義中的SpEL表達(dá)式語(yǔ)言支持操作示例
- Spring組件開(kāi)發(fā)模式支持SPEL表達(dá)式
- Spring中SpEL表達(dá)式的使用全解
相關(guān)文章
SpringBoot響應(yīng)出現(xiàn)中文亂碼的解決方法
這篇文章主要介紹了SpringBoot響應(yīng)出現(xiàn)中文亂碼的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起來(lái)學(xué)習(xí)吧2024-02-02dubbo新手學(xué)習(xí)之事件通知實(shí)踐教程
這篇文章主要給大家介紹了關(guān)于dubbo新手學(xué)習(xí)之事件通知實(shí)踐的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Spring boot連接MySQL 8.0可能出現(xiàn)的問(wèn)題
這篇文章主要給大家介紹了關(guān)于Spring boot連接MySQL 8.0可能出現(xiàn)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10深入了解Java核心類(lèi)庫(kù)--BigDecimal和System類(lèi)
這篇文章主要為大家詳細(xì)介紹了javaBigDecimal和System類(lèi)定義與使用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來(lái)幫助2021-07-07javaweb頁(yè)面附件、圖片下載及打開(kāi)(實(shí)現(xiàn)方法)
下面小編就為大家?guī)?lái)一篇javaweb頁(yè)面附件、圖片下載及打開(kāi)(實(shí)現(xiàn)方法)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Spring boot 跳轉(zhuǎn)到j(luò)sp頁(yè)面的實(shí)現(xiàn)方法
本篇文章主要介紹了Spring boot 跳轉(zhuǎn)到j(luò)sp頁(yè)面的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04