当前位置: 首页 > news >正文

SpEL 的使用

SpEL 的使用

SpEL的全称为 Spring Expression Language,具有再运行时构建复杂表达式、存取对象图属性、对象方法调用等功能

下面是一个简单样例

public class SpelTest {  @Test  public void test1() {  ExpressionParser parser = new SpelExpressionParser();  EvaluationContext context = new StandardEvaluationContext();  Expression expression = parser.parseExpression("'Hello' + ' world' + '!'");  System.out.println(expression.getValue(context));  }
}

输出:

Hello world!

可以看到,再这个例子中,表达式为'Hello' + ' world' + '!',可以看作是'Hello'' world''!'三个字符串的拼接,解析后返回Hello world!

SpEL也支持数字运算:

@Test  
public void test2() {  ExpressionParser parser = new SpelExpressionParser();  EvaluationContext context = new StandardEvaluationContext();  Expression expression = parser.parseExpression("100 + 10");  System.out.println(expression.getValue(context));  expression = parser.parseExpression("100 - 10");  System.out.println(expression.getValue(context));  expression = parser.parseExpression("100 * 10");  System.out.println(expression.getValue(context));  expression = parser.parseExpression("100 / 10");  System.out.println(expression.getValue(context));  expression = parser.parseExpression("100 > 10");  System.out.println(expression.getValue(context));  expression = parser.parseExpression("100 > 10 ? 'A' : 'B'");  System.out.println(expression.getValue(context));  
}

输出:

110
90
1000
10
true
A

此外,SpEL也可以解析方法调用,能够获取调用指定类的指定方法和属性:

@Test  
public void test3() {  UserInfo userInfo = new UserInfo();  userInfo.setUserName("AAA");  ExpressionParser parser = new SpelExpressionParser();  StandardEvaluationContext context = new StandardEvaluationContext(userInfo);  String getUserName = "getUserName";  Expression expression = parser.parseExpression(getUserName);  System.out.println(expression.getValue(context));  
}

输出:

AAA

也可以设置参数:

@Test  
public void test4() {  UserInfo userInfo = new UserInfo();  userInfo.setUserName("BBB");  ExpressionParser parser = new SpelExpressionParser();  String setUserName = "setUserName(#userName)";  StandardEvaluationContext context = new StandardEvaluationContext(userInfo);  context.setVariable("userName", "AAA");  Expression expression = parser.parseExpression(setUserName);  System.out.println(userInfo.getUserName());  
}

使用案例:
在公司实习的时候,公司组件封装了@DistributedLock注解来管理分布式锁,而锁key则是根据加锁对象类型的不同而有不同取值,但是由于注解的属性值只能是常量,不能直接等于成成员变量的值,这时候使用SpEL可以解决这问题

@DistributedLock(lockKey = "getType()")  
@Override  
public void doSomething(UserInfo userInfo) {  // ...
}

在这个例子中,他会在代理解析过程中调用被代理方法的第一个参数的指定方法,即lockKey的值,也就是userInfo.getType()来设置分布式锁的key,这样就能对加锁对象进行动态的调整

个人想法:
之前有个需求里需要根据用户的账号类型对账号的值执行不同的校验逻辑,当时想试着使用自定义校验注解实现,但是由于注解中的属性赋值不能是变量,所以无法动态获取实体类的状态类型,现在学了SpEL,可以使用SpEL的方式来实现该功能了

相关文章:

SpEL 的使用

SpEL 的使用 SpEL的全称为 Spring Expression Language,具有再运行时构建复杂表达式、存取对象图属性、对象方法调用等功能 下面是一个简单样例 public class SpelTest { Test public void test1() { ExpressionParser parser new SpelExpressionParser(); …...

数据采集实战:电商详情页数据埋点

本文我们以电商产品的商品详情页为例,介绍如何做用户浏览以及点击行为的数据埋点。 案例中包含一个页面(商品详情页)以及该页面上的关键按钮(加购、收藏按钮),具体页面如下图所示。 (1&#xf…...

计算机网络——计算大题(七)

前言: 最近也是在准备计算机考试,我们的考试形式是上机考试,所以可能有些计算题是会给提供思路的,前面已经对本学期的计算机网络知识有了一个简单的认识与了解,现在我们就来对计算大题进行一个学习吧,这里的…...

子网掩码与IP段计算

一.什么叫子网掩码: 子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。 子网掩…...

【译文】IEEE白皮书 6G 太赫兹技术的基本原理 2023版

第一章 简介 太赫兹波是介于微波和光波之间的光谱区域,频率从 0.1THz ~ 10THz 之间,波长在 3mm ~ 30μm 之间。提供大块连续的频带范围以满足对 Tbit/s 内极高数据传输速率的需求,使该区域成为下一代无线通信(6G)的重…...

AUTOSAR从入门到精通-网络通信(UDPNm)(三)

目录 前言 原理 网络状态 初始化 执行 处理器架构 时间参数...

ubuntu 使用openssl制作一个自签名证书

我们需要为浏览器创建自己的根CA证书来信任自签名证书。因此,让我们首先创建根CA证书 创建根CA证书 创建文件夹 mkdir openssl && cd openssl执行以下openssl命令,生成 rootCA.key 以及 rootCA.crt. 用你的域名或者ip地址替换demo.mlopshub.c…...

WPF+Halcon 培训项目实战(1-5):Halcon安装,图像处理,Halcon简单模板匹配

文章目录 前言相关链接项目专栏我个人对就业市场的评价Halcon安装实战1-4:Halcon基础实战5:模板匹配[形状匹配]实战代码 结尾 前言 为了更好地去学习WPFHalcon,我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主…...

虚函数的讲解

文章目录 虚函数的声明与定义代码演示基类Person派生类Man派生类Woman 测试代码动态绑定静态绑定访问私有虚函数总结一下通过成员函数指针调用函数的方式 虚函数的声明与定义 虚函数存在于C的类、结构体等中,不能存在于全局函数中,只能作为成员函数存在…...

Java强软弱虚引用

面试: 1.强引用,软引用,弱引用,虚引用分别是什么? 2.软引用和弱引用适用的场景? 3.你知道弱引用的话,能谈谈WeakHashMap吗? 目录 一、Java引用 1、强引用(默认支持模式…...

QCharView使用

QCharView概念:title、系列、图标Chart、视图 说明: 需要添加Qt组件charts 在使用QChart或者QChartView之前需要添加宏定义QT_CHARTS_USE_NAMESPACE (其实是使用了命名空间),不然不能识别QChart或者QChartView 3.在添加宏定义QT_CHARTS_USE_N…...

华为hcia之ipv6实验手册

R3: dhcp enable ipv6 dhcpv6 pool test address prefix 2000:23::/64 excluded-address 2000:23::2 dns-server 2000:23::2 interface GigabitEthernet0/0/0 ipv6 enable ipv6 address 2000:12::2/64 ipv6 address auto link-local undo ipv6 nd ra halt //无状态配置 inter…...

算法设计与分析-图算法小结BFS/DFS/Topologic/Dijkstra/Floyd/最大流

图 注:CSDN貌似不支持较长公式,可以复制到Markdown编辑器查看 图的表示 邻接矩阵 空间复杂度 Θ ( V 2 ) Θ(V^2) Θ(V2)邻接链表 空间复杂度 Θ ( V E ) Θ(VE) Θ(VE) BFS 邻接链表 时间复杂度 Θ ( V E ) Θ(VE) Θ(VE) void BFS(Graph G, int v) {//…...

CentOS 8 安装指定版本ansible

背景:想要练习ansible使用,用于面试,结果使用centos 8 的yum安装失败,提示版本不兼容(指的是python版本),故而使用python来安装指定版本的ansible,特此记录 环境:win11虚…...

策略模式(及案例)

策略模式 1.策略接口 定义一组算法或操作的通用接口,通常是一个抽象类或接口。该接口声明了策略类所必须实现的方法。 示例: class Strategy {doOperation() {} }2.具体策略 实现策略接口,提供具体的算法实现。每个具体策略类负责处理一…...

苹果CMS超级播放器专业版无授权全开源,附带安装教程

源码介绍 超级播放器专业版v1.0.8,内置六大主流播放器,支持各种格式的视频播放,支持主要功能在每一个播放器内核中都相同效果。 搭建教程 1.不兼容IE浏览器 2.php版本推荐7.4 支持7.1~7.4 3.框架引入不支持同时引入多个播放器 json对接教…...

项目记录:利用Redis实现缓存以提升查询效率

一、概述 当我们查询所有数据时,如果缓存中没有,则去数据库查询,如果有,直接查缓存的数据就行。注意定期更新缓存数据。 二、主体代码 private static final String ROOM_SCHEDULES_HASH "RoomSchedules";Overridepu…...

腾讯云16核32G28M轻量服务器CPU流量性能测评

腾讯云轻量16核32G28M服务器28M公网带宽下载速度峰值可达3584KB/s,折合3.5M/秒,系统盘为380GB SSD盘,6000GB月流量,折合每天200GB流量。腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器16核32G28M配置性能、CPU主频型号、公网…...

【并发设计模式】聊聊等待唤醒机制的规范实现

在多线程编程中,其实就是分工、协作、互斥。在很多场景中,比如A执行的过程中需要同步等待另外一个线程处理的结果,这种方式下,就是一种等待唤醒的机制。本篇我们来讲述等待唤醒机制的三种实现,以及对应的应用场景。 G…...

CentOS:docker同一容器间通信

docker同一容器中不同服务以别名访问 1、创建bridge网络 docker network create testnet 2、查看Docker网络 docker network ls 3、运行容器连接到testnet网络 使用方法&#xff1a;docker run -it --name <容器名> —network --network-alias <网络别名> <…...

数据治理:释放数据价值的关键

随着数字化时代的到来&#xff0c;数据已成为组织和企业最重要的资产之一。然而&#xff0c;数据的快速增长和复杂性也给数据管理带来了巨大的挑战。为了确保数据的质量、安全性和合规性&#xff0c;数据治理已成为组织和企业必须面对的重要问题。数据治理是数据要素市场建设的…...

新手快速上手掌握基础排序<一>

听说看到日落金山的人&#xff0c;接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 引言 从基础的两数交换排序&#xff0c;三四个数排序输出&#xff0c;到学习入门级的排序方法&#xff0c;如冒泡法&#xff0c;选择法&#xff0c;再学…...

2023年03月21日_chatgpt宕机事件的简单回顾

你能想象吗 ChatGPT挂了 昨天半夜呢 来自全球各地的用户纷纷发现 ChatGPT的网站弹出了报错警告的信息 然后立即就无法使用了 即使是有特权的plus账户也未能幸免 一时之间呢 chatgptdown的话题在Twitter刷屏 不少重度的用户表示很着急 有的用户说呢没了ChatGPT 这工作…...

RK3568测试tdd

RK3568测试tdd 一、门禁取包二、烧录三、跑tdd用例四、查看结果参考资料 一、门禁取包 右键复制链接&#xff0c;粘贴下载&#xff1b;解压到文件夹&#xff1b; 二、烧录 双击\windows\RKDevTool.exe打开烧写工具&#xff0c;工具界面击烧写步骤如图所示&#xff1a; 推荐…...

机器学习系列13:通过随机森林获取特征重要性

我们已经知道通过 L1 正则化和 SBS 算法可以用来做特征选择。 我们还可以通过随机森林从数据集中选择相关的特征。随机森林里面包含了多棵决策树&#xff0c;我们可以通过计算特征在每棵决策树决策过程中所产生的的信息增益平均值来衡量该特征的重要性。 你可能需要参考&…...

flink中值得监控的几个指标

背景 为了维持flink的正常运行&#xff0c;对flink的日常监控就变得很重要&#xff0c;本文我们就来看一下flink中要监控的几个重要的指标 重要的监控指标 1.算子的处理速度的指标&#xff1a;numRecordsInPerSecond/numRecordsOutPerSecond,这有助于你了解到算子的是否正在…...

最优化方法Python计算:无约束优化应用——逻辑分类模型

逻辑回归模型更多地用于如下例所示判断或分类场景。 例1 某银行的贷款用户数据如下表&#xff1a; 欠款&#xff08;元&#xff09;收入&#xff08;元&#xff09;是否逾期17000800Yes220002500No350003000Yes440004000No520003800No 显然&#xff0c;客户是否逾期&#xff…...

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * &#xff1f;” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释...

Java EE Servlet之Servlet API详解

文章目录 1. HttpServlet1.1 核心方法 2. HttpServletRequest3. HttpServletResponse 接下来我们来学习 Servlet API 里面的详细情况 1. HttpServlet 写一个 Servlet 代码&#xff0c;都是要继承这个类&#xff0c;重写里面的方法 Servlet 这里的代码&#xff0c;只需要继承…...

neo4j运维管理

管理数据库 概念 Neo4j 5(从v4.0)&#xff0c;可以同时创建和使用多个活动数据库。 DBMS Neo4j是一个数据库管理系统(DBMS)&#xff0c;能够管理多个数据库。DBMS可以管理一个独立的服务器&#xff0c;也可以管理集群中的一组服务器。 实例 Neo4j实例是运行Neo4j服务器代…...

做的网站.如何在局域网内访问/无锡百姓网推广

昨天开始接到用户提报&#xff0c;说是iprocess没有同步个人账号。这个简单&#xff0c;在我们本身的程序上跑一下就可以添加。所以很简单运行一下。com.staffware.sso.data.vException: SAL system error what&#xff1f;报错了&#xff1f;我晕&#xff0c;当时简单的认为&a…...

东莞网页制作招聘信息/怎样优化网站

一、 QT内置的ICON资源保存在QStyle类里。 可以通过成员函数 QStyle::standardIcon 来获取。 保存的icon有&#xff1a; enum QStyle::StandardPixmap This enum describes the available standard pixmaps. A standard pixmap is a pixmap that can follow some existing…...

网站建设类电话销售/seo网络排名优化技巧

其实还是这个老问题&#xff1a; 记一次文件下载丢包填坑之旅 http://www.cnblogs.com/syjkfind/p/5281677.html 即使现在只有haproxy-nginx-磁盘文件 比较少的转发&#xff0c;但文件特别大&#xff0c;还是偶有文件不完整的问题。 从现象上看&#xff0c;浏览器响应是200没问…...

买模板做网站/百度网站大全首页

这问题我会先自我介绍一下,我是十五年工作经验的程序员,但很不好意思,今年(2020年)二月份才接触linux,到现在为止(2020年11月),已经在公司内部的布署了多套linux下的应用与解决方案,并负责这些服务器的运维,我觉得我有资格回答你的问题.以下是我的回答:1.安装linux,不推荐使用虚…...

wordpress 手机页面停/公司做个网站多少钱

>>>>>Unit 11.行提示符例如&#xff1a;[kioskfoundation0 Desktop]$kiosk ##打开shell的用户 ##分隔符foundation0 ##主机名称Desktop ##工作目录名称$ ##身份提示符&#xff0c;#表示超级用户&#xff0c;$表示普通用户注&#xff1a;命令要在行提示符之后输入…...

wordpress theme demo bar/网站维护一般都是维护什么

1JMS与MQ 1.1JMSJMS&#xff08;Java Messaging Service&#xff09;是Java平台上有关面向消息中间件&#xff08;MOM&#xff09;的技术规范&#xff0c;它便于消息系统中的Java应用程序进行消息交换&#xff0c;并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开…...