溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring spel表達(dá)式使用方法示例

發(fā)布時(shí)間:2020-10-23 01:33:46 來源:腳本之家 閱讀:159 作者:yangnianbing110 欄目:編程語言

spring in action第三版讀書筆記

spring3.0引入了spring expression language(spel)語言,通過spel我們可以實(shí)現(xiàn)

1.通過bean的id對(duì)bean進(jìn)行引用

2.調(diào)用方法以及引用對(duì)象中的屬性

3.計(jì)算表達(dá)式的值

4.正則表達(dá)式的匹配

5.集合的操作

spel最終的目標(biāo)是得到表達(dá)式計(jì)算之后的值,這些表達(dá)式可能是列舉的一些值,引用對(duì)象的某些屬性,或者是類中的某些常量,復(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的引用

通過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的值,這也帶來一個(gè)問如果selectSong()方法返回一個(gè)null,那么會(huì)拋出一個(gè)空指針異常

<property name="song" value="#{songSelector.selectSong()?.toUpperCase()}"/>,表達(dá)式(?.)可以確保在selectSong()返回不為空的情況下調(diào)用toUpperCase()方法,如果返回空那么不繼續(xù)調(diào)用后面的方法

對(duì)類進(jìn)行引用

如果某個(gè)類是外部類,而不是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)算符來計(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類型<property name="chosenCity" value="#{cities["keyName"]}"/>
[]對(duì)Properties類型進(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)行過濾
<property name="bigCitis" value="#{cities.?[population gt 10000]}"/>選中人口大一10000的cities中的元素作為bigCitis的值,同操作符(.?[])類似, 操作符(.^[]選取滿足要求的第一個(gè)元素, .$[]選取滿足要求的最后一個(gè))
選中已有集合中元素的某一個(gè)或幾個(gè)屬性作為新的集合
<property name="cityNames" value="#{cities.![name + ", " + state]}"/>

總結(jié)

以上就是本文關(guān)于Spring spel表達(dá)式使用方法示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI