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.mzph.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…