javascript
sple表达式_学习Spring表达式语言(SpEL)
概觀
Spring Expression Language(縮寫(xiě)為SpEL)是一種強(qiáng)大的表達(dá)式語(yǔ)言。在Spring產(chǎn)品組合中,它是表達(dá)式計(jì)算的基礎(chǔ)。它支持在運(yùn)行時(shí)查詢(xún)和操作對(duì)象圖,它可以與基于XML和基于注解的Spring配置還有bean定義一起使用。由于它能夠在運(yùn)行時(shí)動(dòng)態(tài)分配值,因此可以為我們節(jié)省大量Java代碼。
項(xiàng)目設(shè)置
對(duì)于Maven項(xiàng)目,應(yīng)使用以下依賴(lài)項(xiàng):
前兩個(gè)依賴(lài)項(xiàng) spring-core 和 spring-context 是SpEL需要的,另外兩個(gè)依賴(lài)項(xiàng) javax.mail 和 commons-io 是被使用在實(shí)際的SpEL例子中的。
語(yǔ)法和特征
SpEL支持標(biāo)準(zhǔn)數(shù)學(xué)運(yùn)算符,關(guān)系運(yùn)算符,邏輯運(yùn)算符,條件運(yùn)算符,集合和正則表達(dá)式等。它可用于將bean或bean屬性注入另一個(gè)bean,還支持bean的方法調(diào)用。以下是SpEL的一些基本功能和操作符:
文字表達(dá)式可用于SpEL表達(dá)式。例如,“Hello SpEL”是一個(gè)字符串文字。如果此文字用作SpEL表達(dá)式,則結(jié)果值也將為“Hello SpEL”。SpEL表達(dá)式支持方法調(diào)用。例如,可以從String文字中調(diào)用concat方法。SpEL表達(dá)式支持?jǐn)?shù)學(xué)運(yùn)算符。所有基本運(yùn)算符,如加法(+),減法( - ),乘法(*),除法(/),模數(shù)(%),指數(shù)冪(^)等,都可以在SpEL表達(dá)式中使用。
關(guān)系運(yùn)算符等于(==),不等于(!=),小于(),大于或等于(> =)在SpEL表達(dá)式中同樣支持。要在基于XML的配置中使用關(guān)系運(yùn)算符,應(yīng)使用文本等效項(xiàng)eq,ne,lt,le,gt,ge。支持邏輯運(yùn)算符,與(&&)或(||)非(!),也可以使用等價(jià)文本。三元運(yùn)算符用于在SpEL表達(dá)式中執(zhí)行if-then-else條件邏輯。當(dāng)我們需要根據(jù)某些條件注入值時(shí),它很有用。
Elvis算子是三元運(yùn)算符的縮短形式。三元運(yùn)算符的一個(gè)常見(jiàn)用途是對(duì)變量進(jìn)行空值檢查,然后返回變量值或默認(rèn)值,Elvis操作很方便。SpEL表達(dá)式支持使用正則表達(dá)式,我們需要使用matches運(yùn)算符來(lái)檢查字符串是否與給定的正則表達(dá)式匹配。我們將使用一個(gè)實(shí)現(xiàn)了ExpressionParser接口的SpelExpressionParser 來(lái)解析SpEL表達(dá)式,調(diào)用SpelExpressionParser 的 parseExpression 方法將返回 SpelExpression 的實(shí)例,該實(shí)例實(shí)現(xiàn)了表達(dá)式接口。通過(guò)調(diào)用 getValue 獲取計(jì)算結(jié)果,代碼如下所示:
現(xiàn)在,我們已經(jīng)使用默認(rèn)的上下文計(jì)算了SpEL表達(dá)式。可以針對(duì)特定對(duì)象實(shí)例計(jì)算SpEL表達(dá)式,該對(duì)象實(shí)例通常被稱(chēng)為根對(duì)象,讓我們定義一個(gè)Bean并將其用作計(jì)算的上下文。
我們將通過(guò)創(chuàng)建StandardEvaluationContext的實(shí)例來(lái)生成計(jì)算上下文, 它將根對(duì)象(在我們的例子中為SampleBean)作為其構(gòu)造函數(shù)中的參數(shù)。 要記住的一件事是StandardEvaluationContext實(shí)例的創(chuàng)建是開(kāi)銷(xiāo)很大的。 因此,我們應(yīng)該盡可能地緩存和重用它們。 以下是針對(duì)根對(duì)象計(jì)算SpEL表達(dá)式的一些用法:
我們可以訪問(wèn)bean的屬性值。我們可以將bean的屬性值與某個(gè)特定值進(jìn)行比較。我們可以訪問(wèn)bean的List屬性的內(nèi)容。 可以使用方括號(hào)表示法訪問(wèn)List的項(xiàng)目,括號(hào)內(nèi)是項(xiàng)目的索引。我們可以訪問(wèn)bean的map屬性的內(nèi)容, 也可以使用方括號(hào)表示法訪問(wèn)map的內(nèi)容,必須在括號(hào)內(nèi)提供鍵值。代碼如下:
Bean 定義中的 SpEL
bean定義中可以使用SpEL表達(dá)式, 它可以與基于XML和基于注解的配置一起使用。 SpEL表達(dá)式以哈希符號(hào)(#)開(kāi)頭,并用大括號(hào)括起來(lái)。 因此,它遵循形式#{}, SpEL表達(dá)式可用于引用bean或bean的屬性/方法。 以下是基于注解的配置示例:
實(shí)際例子
我們已經(jīng)了解了SpEL表達(dá)式的基本功能。 現(xiàn)在,讓我們將它應(yīng)用于一個(gè)有趣的實(shí)際例子中。 假設(shè)我們要向用戶發(fā)送HTML電子郵件, 應(yīng)在運(yùn)行時(shí)動(dòng)態(tài)地將一些值注入HTML模板中。 在這種情況下,在HTML模板中使用SpEL表達(dá)式可能是一個(gè)很好的解決方案。 以下是包含SpEL表達(dá)式的HTML模板示例:
在上面的例子中,我們?cè)赟pEL表達(dá)式中使用了User bean,這是前面定義的, 我們還在SpEL表達(dá)式中使用了Company bean。 以下是Company bean的定義:
現(xiàn)在我們?nèi)绾卧贖TML模板中注入值? 我們必須迭代HTML模板的內(nèi)容并找出其中使用的所有SpEL表達(dá)式,必須解析和計(jì)算每個(gè)SpEL表達(dá)式,我們必須用計(jì)算好的值來(lái)替換HTML模板中所有SpEL表達(dá)式。這里我們必須使用根對(duì)象BeanExpressionContext,我們的ApplicationContext中的BeanFactory將被用于創(chuàng)建BeanExpressionContext的實(shí)例。
對(duì)于發(fā)送電子郵件,我們將使用標(biāo)準(zhǔn)JavaMail API,我們將使用QQ的SMTP作為SMTP服務(wù)器,其他SMTP服務(wù)器也可以以相同的方式使用。 這是完整的例子:
總結(jié)
在本文中,我們通過(guò)一些小例子了解了Spring表達(dá)式語(yǔ)言的基本特性和語(yǔ)法。 這是Spring框架的一個(gè)強(qiáng)大功能。 它可以應(yīng)用于Spring框架開(kāi)發(fā)的任何企業(yè)應(yīng)用程序的各個(gè)領(lǐng)域。如有問(wèn)題,歡迎點(diǎn)評(píng)和指正,也歡迎點(diǎn)贊和轉(zhuǎn)發(fā)。
總結(jié)
以上是生活随笔為你收集整理的sple表达式_学习Spring表达式语言(SpEL)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python文件目录操作操作_Pytho
- 下一篇: 唱歌如何保持高位置_如何理解歌唱发声的高