JEXL(Java Expression Language)用法概览
JEXL(Java Expression Language)是一个用于在Java应用程序中解析和执行表达式的库。JEXL的设计目的是通过提供一种类似于脚本语言的语法,使得可以在应用程序中动态地计算表达式的值。JEXL常用于模板引擎、规则引擎和配置文件等场景。
下面介绍一下JEXL的基本用法和常见的操作:
1. 引入JEXL库
在使用JEXL之前,需要在项目中引入JEXL库。假设使用Maven作为构建工具,可以在pom.xml中添加以下依赖:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-jexl3</artifactId><version>3.2.1</version>
</dependency>
2. 基本使用
2.1 创建JEXL引擎
在使用JEXL表达式之前,首先需要创建一个JEXL引擎:
import org.apache.commons.jexl3.*;JexlEngine jexl = new JexlBuilder().create();
2.2 解析和执行表达式
可以使用JexlEngine对象来创建和解析表达式,然后执行表达式:
// 创建表达式
String jexlExpression = "foo + bar";
JexlExpression expression = jexl.createExpression(jexlExpression);// 创建上下文并赋值
JexlContext context = new MapContext();
context.set("foo", 10);
context.set("bar", 20);// 执行表达式并获取结果
Object result = expression.evaluate(context);System.out.println("Result: " + result); // 输出:Result: 30
2.3 动态脚本执行
除了直接解析和执行单个表达式外,JEXL还支持脚本执行,脚本中可以包含多个表达式:
// 创建脚本
String scriptText = "foo * 10 + bar";
JexlScript script = jexl.createScript(scriptText);// 创建上下文并赋值
JexlContext context = new MapContext();
context.set("foo", 2);
context.set("bar", 5);// 执行脚本并获取结果
Object result = script.execute(context);System.out.println("Script Result: " + result); // 输出:Script Result: 25
3. 常用功能
3.1 条件判断
可以在表达式中使用条件判断:
String conditionExpression = "foo > 10 ? 'high' : 'low'";
JexlExpression expression = jexl.createExpression(conditionExpression);JexlContext context = new MapContext();
context.set("foo", 15);Object result = expression.evaluate(context);
System.out.println("Condition Result: " + result); // 输出:Condition Result: high
3.2 调用方法
可以在表达式中调用Java对象的方法:
String methodExpression = "str.toUpperCase()";
JexlExpression expression = jexl.createExpression(methodExpression);JexlContext context = new MapContext();
context.set("str", "hello");Object result = expression.evaluate(context);
System.out.println("Method Call Result: " + result); // 输出:Method Call Result: HELLO
3.3 使用自定义函数
可以将自定义的Java方法注册为JEXL函数,然后在表达式中调用:
import org.apache.commons.jexl3.*;public class MyFunctions {public static String greet(String name) {return "Hello, " + name;}
}JexlEngine jexl = new JexlBuilder().create();JexlContext context = new MapContext();
context.set("myFunc", new MyFunctions());String functionExpression = "myFunc.greet('John')";
JexlExpression expression = jexl.createExpression(functionExpression);Object result = expression.evaluate(context);
System.out.println("Function Call Result: " + result); // 输出:Function Call Result: Hello, John
4. 结语
JEXL是一种灵活的表达式语言,可以方便地在Java应用程序中动态执行表达式。它的使用场景包括模板处理、规则引擎、条件判断等。通过以上示例,可以了解到JEXL的基本用法,并可以根据实际需求进行扩展和应用。
相关文章:
JEXL(Java Expression Language)用法概览
JEXL(Java Expression Language)是一个用于在Java应用程序中解析和执行表达式的库。JEXL的设计目的是通过提供一种类似于脚本语言的语法,使得可以在应用程序中动态地计算表达式的值。JEXL常用于模板引擎、规则引擎和配置文件等场景。 下面介…...
NC 完全二叉树结点数
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一棵完全…...
点灯案例优化(二) 利用位运算修改特定位
前面,我们对点灯代码进行了第一次优化,效果如下 尽管第一次优化以后代码可读性确实高了不少,也看起来更加简洁,但是,这里仍旧存在一个很严重的问题:就在每一个表达式右边,我们给寄存器的数据赋值…...
【C++备忘录】
记录一些C比较好用的代码块,方便自个查看。 使用std::copy 快速打印序列 #include <iostream> #include <algorithm> #include <iterator>int main() {int a[5] { 1, 2, 3, 4, 5 };copy(begin(a), end(a), ostream_iterator<int>(cout, …...
java编程 斐波拉契数列算法集锦【斐波拉契数列】【下】【集合类】【Stream函数式编程】
斐波那契数列(Fibonacci sequence),又称黄金分割数列,是一个非常经典的递归问题。斐波那契数列的算法描述: 斐波那契数列,一个令人着迷而又充满神秘色彩的数字序列,它以0和1作为起始ÿ…...
智慧园区三维可视化平台
背景 随着物联网、人工智能等新一代信息技术的发展,数字孪生技术逐渐成为实现这一目标的关键工具。数字孪生技术能够对物理世界进行高精度、全要素的映射,并实时动态反映其变化情况,从而为园区提供精准的管理和服务。 方案简介 智慧园区数字…...
Redis 有序集合【实现排行榜】
使用 Redis 的 Sorted Set 数据结构可以非常高效地实现实时排行榜功能。Sorted Set 允许将元素按分数进行排序,同时支持插入、删除和查询操作,且这些操作的时间复杂度较低,非常适合处理高并发的场景。 实现思路 插入操作:当用户…...
ORACLE数据库管理系统介绍
1.ORACLE的特点: 可移植性 ORACLE采用C语言开发而成,故产品与硬件和操作系统具有很强的独立性。从大型机到微机上都可运行ORACLE的产品。可在UNIX、DOS、Windows等操作系统上运行。可兼容性 由于采用了国际标准的数据查询语言SQL,与IBM的SQL/DS、DB2等均兼容。并提供读取其它…...
C# 中Linq探讨 Or条件拼接
在C#中,没有直接内置于.NET Core或.NET Framework中的NuGet包能够直接“拼接”LINQ的OR条件,因为LINQ本身设计为一种声明式编程模型,用于查询数据集合。然而,你可以通过一些方式来实现多个条件以OR逻辑组合的效果,而不…...
有关应用层面试题有关库的思维导体
面试题目: TCP通信中3次握手和四次挥手? 答: 第一次握手:客户端发送SYN包(SYN1, seq0)给服务器,并进入SYN_SENT状态,等待服务器返回确认包。第二次握手:服务器接收到S…...
记一次 SAP BP 编号范围错误引发的一个问题 GET_NRIV_LINE
本来想着循着错误提示去排查,但是还是想看看业务发生了什么,他们的操作是否有问题,不经意间发现 号码段是有问题的,由此大概可以判断是他们编号范围和类型之间的问题 角色和分组是否一致的,如果不一致就发生了以上错误…...
(17)ELK大型储存库的搭建
前言: els是大型数据储存体系,类似于一种分片式存储方式。elasticsearch有强大的查询功能,基于java开发的工具,结合logstash收集工具,收集数据。kibana图形化展示数据,可以很好在大量的消息中准确的找到符…...
每日一问:Kafka消息丢失与堆积问题分析(简化版)
Kafka 消息系统问题解析 在本篇博客中,我们将深入探讨 Kafka 中常见的两大问题:消息丢失和消息堆积。首先,我们将简要介绍 Kafka 的基本工作原理,随后分别分析消息丢失和堆积的原因,并提供针对性的解决方案。 关于其详…...
C语言中函数sizeof和strlen区别
sizeof和strlen是C语言中的两个常用函数,它们的作用和使用方式有所不同。 sizeof sizeof是一个运算符而非函数,用于计算数据类型或变量占用的字节数。它可以计算任意数据类型(包括基本类型、自定义结构体、数组等)的大小。例如&…...
RAG与LLM原理及实践(14)---- Python + MinIO + Kafka进阶
目录 背景 根因分析 配置 构造 创建 network 构造 zookeeper 构造 kafka 参数构造 原理解析 图解 全过程解析 工具使用 kafkacat 查看 broker python 实现 python send + kafka recv python 代码 kafka recv 运行效果 python recv + kafka send python 代…...
接口自动化-代码实现
接口自动化基础 1、接口自动化测试 接口自动化:使用工具或代码代替人对接口进行测试的技术测试目的: 防止开发修改代码时引入新的问题测试时机: 开发进行系统测试转测前,可以先进行接口自动化脚本的编写开发进行系统测试转测后&…...
如何查看linux大文件
文章目录 一、查看存储情况二、查看指定路径下的文件大小查看临时文件和日志的大小 三、查找home目录下文件大小大于100M的大文件四、查看INNODE使用情况五、查看进程使用情况查看所有进程查看特定进程杀死相关进程 六、清除缓存操作七、 查看docker的硬盘占用情况详细查看 一、…...
生成式人工智能服务大模型备案答疑
问:大模型备案范围 答:利用生成式人工智能技术向中华人民共和国境内公众提供生成文本、图片、音频、视频等内容的服务,适用本办法。 未向境内公众提供生成式人工智能服务的,不适用本办法的规定。 ps:生成式人工智能…...
QT-贪吃蛇小游戏
QT-贪吃蛇小游戏 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "Food.h" #include <QTime> #include <time.h> #include "Snake.h"Food::Food(int foodSize):foodSize(foodSize) {coordinate.x -1;coordinate.…...
虚幻5|AI视力系统,听力系统,预测系统(1)视力系统
继宠物伴随系统初步篇后续 虚幻5|AI巡逻宠物伴随及定点巡逻—初步篇-CSDN博客 一,听力系统 1.打开宠物ai的角色蓝图 2.选中ai感知组件 右侧细节,找到ai感知,添加感知配置,我们需要的是ai视力配置 3.选中左侧创建的ai感知组件&…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
