Spring 核心特性之表達式(SpEL)

Spring 核心特性之表達式(SpEL)_spring spel-CSDN博客?-- 寫的還行

關于SpEL的幾個概念:
  1. 表達式(“干什么”):SpEL的核心,所以表達式語言都是圍繞表達式進行的。
  2. 解析器(“誰來干”):用于將字符串表達式解析為表達式對象。
  3. 上下文(“在哪干”):表達式對象執行的環境,該環境可能定義變量、定義自定義函數、提供類型轉換等等。
  4. root根對象及活動上下文對象(“對誰干”):root根對象是默認的活動上下文對象,活動上下文對象表示了當前表達式操作的對象。

可以使用?#variableName?的形式引用變量,變量在?EvaluationContext#setVariable?上進行設置,變量名只能包含字母?AZa?到z、數字?0?到?9、下劃線?_?以及美元符號?$。變量使用示例如下。?

//調用對象屬性值
public static void main(String[] args) {// Create and set a calendarGregorianCalendar c = new GregorianCalendar();c.set(1856, 7, 9);//構造一個對象,  The constructor arguments are name, birthday, and nationality.Inventor tesla = new Inventor("Nikola Tesla", c.getTime(), "Serbian");ExpressionParser parser = new SpelExpressionParser();//對應方法:  Object getValue(@Nullable Object rootObject)Expression exp = parser.parseExpression("name"); // Parse name as an expressionString name = (String) exp.getValue(tesla);System.out.println(name);// name == "Nikola Tesla"exp = parser.parseExpression("name == 'Nikola Tesla'");boolean result = exp.getValue(tesla, Boolean.class);System.out.println(result);// result == true}
//設置全局參數, 參數取值
public static void main(String[] args) {ExpressionParser parser = new SpelExpressionParser();//#end 變量取值Expression expression = parser.parseExpression("('Hello' + ' World').concat(#end)");EvaluationContext context = new StandardEvaluationContext();context.setVariable("end", "!");System.out.println(expression.getValue(context));}
#被調用方法
public class CustomFunctions {public static boolean isMember(String name) {// 在這里編寫檢查是否為會員的邏輯,這里只是一個示例if (name.equals("Mihajlo Pupin")) {return true;} else {return false;}}
}
//spel表達式中, 調用方法參數
public static void main(String[] args) {
//        方式1:
//        StandardEvaluationContext context = new StandardEvaluationContext();
//        context.registerFunction("isMember", CustomFunctions.class.getDeclaredMethod("isMember", String.class));  //注冊自定義函數//        方式2:EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();context.setVariable("isMember", CustomFunctions.class.getDeclaredMethod("isMember", String.class));//通過變量方式執行方法SpelExpressionParser parser = new SpelExpressionParser();boolean isMember = parser.parseExpression("#isMember('Mihajlo Pupin1')").getValue(context, Boolean.class);System.out.println(isMember);}
// 調用Bean 中的方法
public static void main(String[] args) {/*** 調用Bean 中的方法* 如果解析上下文已經配置,那么bean解析器能夠 從表達式使用(@)符號查找bean類。*/// 1.創建表達式解析器ExpressionParser parser = new SpelExpressionParser();// 2.創建變量上下文,設置變量StandardEvaluationContext ctx = new StandardEvaluationContext();// 此處用DefaultListableBeanFactory做測試,系統運行時可傳入ApplicationContextDefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();beanFactory.registerSingleton("user", new CustomFunctions("成龍"));ctx.setBeanResolver(new BeanFactoryResolver(beanFactory));// 3. spel解析器執行表達式取得結果System.out.println(parser.parseExpression("@user.getName()").getValue(ctx, String.class));
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212313.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212313.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212313.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【論文筆記】Gemini: A Family of Highly Capable Multimodal Models——細看Gemini

Gemini 【一句話總結,對標GPT4,模型還是transformer的docoder部分,提出三個不同版本的Gemini模型,Ultra的最牛逼,Nano的可以用在手機上。】 谷歌提出了一個新系列多模態模型——Gemini家族模型,包括Ultra…

Java 何時會觸發一個類的初始化

Java 何時會觸發一個類的初始化? 使用new關鍵字創建對象訪問類的靜態成員變量 或 對類的靜態成員變量進行賦值調用類的靜態方法反射調用類時,如 Class.forName()初始化子類時,會先初始化其父類(如果父類還沒有進行過初始化的話&a…

找不到WMVCORE.dll怎么辦?一鍵解決WMVCORE.dll缺失的詳細方法分享

當打開軟件時提示wmvcore.dll丟失,這可能是由于以下幾個原因導致的: 系統文件損壞:wmvcore.dll是系統文件,可能會因為各種原因(如病毒感染、系統錯誤、軟件卸載等)而損壞。 軟件依賴問題:某些…

用 Python 自動創建 Markdown 表格

更多資料獲取 📚 個人網站:ipengtao.com Markdown表格是文檔中整理和展示數據的重要方式之一。然而,手動編寫大型表格可能會費時且容易出錯。本文將介紹如何使用Python自動創建Markdown表格,通過示例代碼詳細展示各種場景下的創建…

Linux基礎指令詳解(1)

操作系統的概念 百度百科 操作系統(英語:Operating System,縮寫:OS)是一組主管并控制計算機操作、運用和運行硬件、軟件資源和提供公共服務來組織用戶交互的相互關聯的系統軟件程序。根據運行的環境,操作系…

【Python網絡爬蟲入門教程1】成為“Spider Man”的第一課:HTML、Request庫、Beautiful Soup庫

Python 網絡爬蟲入門:Spider man的第一課 寫在最前面背景知識介紹蛛絲發射器——Request庫智能眼鏡——Beautiful Soup庫 第一課總結 寫在最前面 有位粉絲希望學習網絡爬蟲的實戰技巧,想嘗試搭建自己的爬蟲環境,從網上抓取數據。 前面有寫一…

論文閱讀——Deformable ConvNets v2

論文:https://arxiv.org/pdf/1811.11168.pdf 代碼:https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 1. 介紹 可變形卷積能夠很好地學習到發生形變的物體,但是論文觀察到當盡管比普通卷積網絡能夠更適應物體形變&#xff…

LeetCode-1566. 重復至少 K 次且長度為 M 的模式【數組 枚舉】

LeetCode-1566. 重復至少 K 次且長度為 M 的模式【數組 枚舉】 題目描述:解題思路一:題意就是找出長度為m且連續重復k次的子數組。解題思路就是暴力枚舉加剪枝。解題思路二:思路差不多解題思路三:0 題目描述: 給你一個…

Numpy數組的去重 np.unique()(第15講)

Numpy數組的去重 np.unique()(第15講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ?????????????????????????????????????????????????????????????????????????????????…

Linux權限詳解

Linux權限 文章目錄 Linux權限一、root賬號與普通賬號二、Linux權限管理三、權限權值表示方法四、文件訪問權限的設置方法五、粘滯位六、權限總結 前言: 我們在學習Linux的時候,我們知道在Linux下一切皆文件,而不同的文件對于不同的用戶有不同…

第二十一章總結。。

計算機網絡實現了墮胎計算機間的互聯,使得它們彼此之間能夠進行數據交流。網絡應用程序就是再已連接的不同計算機上運行的程序,這些程序借助于網絡協議,相互之間可以交換數據,編寫網絡應用程序前,首先必須明確網絡協議…

掌握iText:輕松處理PDF文檔-基礎篇

關于iText iText是一個強大的PDF處理庫,可以用于創建、讀取和操作PDF文件。它支持PDF表單、加密和簽署等操作,同時支持多種字體和編碼。maven的中央倉庫中的最新版本是5.X,且iText5不是完全免費的,但是基礎能力是免費使用的&…

2023-12-10 LeetCode每日一題(爬樓梯)

2023-12-10每日一題 一、題目編號 70. 爬樓梯二、題目鏈接 點擊跳轉到題目位置 三、題目描述 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 示例 1: 示例 2: 提…

gin投票系統2

投票系統 數據庫的建立 先分析需求,在sql中建立數據庫,關于項目數據庫如何建立可以在“goweb項目創建流程分析中看如何去建表” 成功后目前有四個表: vote,user,vote_opt,vote_opt_user 建立數據庫,可以…

Flink基本轉換算子map/filter/flatmap

map map是大家非常熟悉的大數據操作算子,主要用于將數據流中的數據進行轉換,形成新的數據流。簡單來說,就是一個“一一映射”,消費一個元素就產出一個元素。 我們只需要基于DataStream調用map()方法就可以進行轉換處理。方法需要…

案例026:基于微信小程序的原創音樂系統的設計與實現

文末獲取源碼 開發語言:Java 框架:SSM JDK版本:JDK1.8 數據庫:mysql 5.7 開發軟件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序開發軟件:HBuilder X 小程序…

什么是Restful?

Rest簡介 REST是英文representational state transfer(表象性狀態轉變)或者表述性狀態轉移。Rest是web服務的一種架構風格。使用HTTP,URI,XML,JSON,HTML等廣泛流行的標準和協議。輕量級,跨平臺,跨語言的架構設計。它是一種設計風格,不是一種標準,是一種思想。 Rest架構的主要…

java程序定時器

目錄 1.java定時器原生方法 1.java定時器原生方法 實現每天早上8點執行任務的示例代碼 import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class TimeTest{pub…

汽車網絡安全--關于UN R155認證的思考

1.UN R155概述 2020年6月25日,聯合國頒布了全球首個汽車網絡安全強制性法規 -- UN 155,詳細規定了關于評估網絡安全措施的審核條款、制造商和供應商降低網絡安全風險的方法以及實施風險評估的義務等。 法規適用于與信息安全相關的M類(4輪及以上載客汽車)、N類(四輪載貨汽車)…

SpringBoot項目連接Graylog

直接用logback將控制臺輸出的日志發送到graylog上 1.導入logback依賴 <dependency> <groupId>de.siegmar</groupId> <artifactId>logback-gelf</artifactId> <version>1.1.0</version> </dependency> 2.創建logback-spring.x…