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

Spring表达式语言(SPEL)(05)

表达式模板

表达式模板允许将文字文本与一个或多个评估块混合。每个评估块都由前缀和后缀字符分隔,默认是#{}。支持实现接口ParserContext自定义前后缀。调用parseExpression()时指定 ParserContext参数如:new TemplateParserContext(),#{}包起来的表达式会被计算

@Test
public void test23 () {//the year is 2014String expressionStr = "the year is #{T(java.util.Calendar).getInstance().get(T(java.util.Calendar).YEAR)}";ExpressionParser parser = new SpelExpressionParser();Expression expression = parser.parseExpression(expressionStr, new TemplateParserContext());System.out.println(expression.getValue());
}

使用场景

当我们不想计算整个表达式的信息,只想要计算某个对应的表达式信息时可以使用表达式模板

@Test
public void test01() {ExpressionParser parser = new SpelExpressionParser();System.out.println(parser.parseExpression("'hello is 1+1'").getValue());// hello is 1+1ParserContext templateExpression = ParserContext.TEMPLATE_EXPRESSION;System.out.println(parser.parseExpression("hello is #{1+1}", templateExpression).getValue());// hello is 2
}

自定义模板

@Test
public void test02() {ExpressionParser parser = new SpelExpressionParser();ParserContext templateExpression = new ParserContext() {// 是否启用模板@Overridepublic boolean isTemplate() {return true;}// 前缀@Overridepublic String getExpressionPrefix() {return "%{";}// 后缀@Overridepublic String getExpressionSuffix() {return "}";}};System.out.println(parser.parseExpression("hello is #{1+1}", templateExpression).getValue());System.out.println(parser.parseExpression("hello is %{1+1}", templateExpression).getValue());
}

ParserContext接口(解析上下文)

ParserContext接口代表提供给表达式解析器的输入,可以影响表达式解析和编译

public interface ParserContext {// 是否启用模板boolean isTemplate();// 模板表达式的前缀String getExpressionPrefix();//  模板表达式的后缀String getExpressionSuffix();// 启用模板表达式解析模式的默认 ParserContext 实现。表达式前缀是“#{”,表达式后缀是“}”。ParserContext TEMPLATE_EXPRESSION = new ParserContext() {@Overridepublic boolean isTemplate() {return true;}@Overridepublic String getExpressionPrefix() {return "#{";}@Overridepublic String getExpressionSuffix() {return "}";}};
}

TemplateParserContext

可以自定义模板的信息

public class TemplateParserContext implements ParserContext {private final String expressionPrefix;private final String expressionSuffix;public TemplateParserContext() {this("#{", "}");}public TemplateParserContext(String expressionPrefix, String expressionSuffix) {this.expressionPrefix = expressionPrefix;this.expressionSuffix = expressionSuffix;}public final boolean isTemplate() {return true;}public final String getExpressionPrefix() {return this.expressionPrefix;}public final String getExpressionSuffix() {return this.expressionSuffix;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 51单片机-串口通信(单片机和PC互发数据)
  • 软件部署-Docker容器化技术
  • 探索Python的数学魔法:Numpy库的神秘力量
  • 二维空间向量的p范数等密度轨迹
  • 负载均衡--资源申请说明(三)
  • 基于苹果Vision Pro的AI NeRF方案:MetalSplatter
  • SpringBoot3+Vue3开发商店上货管理系统
  • WordPress上可以内容替换的插件
  • 漫谈设计模式 [16]:中介者模式
  • windows C++ 虚拟内存的按需调拨
  • Typora教程
  • 基于图谱的记忆存储 - mem0 graph memory + neo4j
  • FreeRTOS学习笔记(五)任务进阶篇
  • <Rust>egui学习之小部件(九):如何在窗口中添加下拉列表combobox部件?
  • 同城搭子怎么找?靠谱找搭子平台排行榜前十名测评
  • #Java异常处理
  • [LeetCode] Wiggle Sort
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CentOS7 安装JDK
  • JAVA SE 6 GC调优笔记
  • java8-模拟hadoop
  • jquery cookie
  • leetcode讲解--894. All Possible Full Binary Trees
  • 爱情 北京女病人
  • 多线程 start 和 run 方法到底有什么区别?
  • 缓存与缓冲
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • -- 数据结构 顺序表 --Java
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 容器镜像
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​补​充​经​纬​恒​润​一​面​
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #{} 和 ${}区别
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (八)c52学习之旅-中断实验
  • (二)c52学习之旅-简单了解单片机
  • (二十四)Flask之flask-session组件
  • (九)c52学习之旅-定时器
  • (九十四)函数和二维数组
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)软件性能测试
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Linux网络编程入门
  • (自用)交互协议设计——protobuf序列化
  • . NET自动找可写目录
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET MVC之AOP