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

news2024/11/15 12:03:02

表达式模板

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

@Test
public void test23 () {
    //the year is 2014
    String 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+1
    ParserContext 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() {
        // 是否启用模板
        @Override
        public boolean isTemplate() {
            return true;
        }

        // 前缀
        @Override
        public String getExpressionPrefix() {
            return "%{";
        }

        // 后缀
        @Override
        public 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() {
      @Override
      public boolean isTemplate() {
         return true;
      }

      @Override
      public String getExpressionPrefix() {
         return "#{";
      }

      @Override
      public 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;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

还不会剪音乐?试试这四款在线音频剪辑

音频剪辑很多人都没有接触过。其实这并不是一个难事,我们甚至可以用一些简单的工具来给自己做个简单的BGM,最近我尝试了几款不同的音频剪辑工具。今天就来跟大家分享一下我的使用体验,看看哪款工具更适合你的需求。 一、福昕音频剪辑 网址&…

通信工程学习:什么是FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用

FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用 FDM频分复用、TDM时分复用、WDM波分复用、CDM码分复用是通信领域中常见的四种复用技术,它们各自具有不同的特点和应用场景。以下是对这四种复用技术的详细解释: 一、FDM频分复用(Frequ…

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同…

强推!创新直发核心!时序分解+优化组合+模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测

强推!创新直发核心!时序分解优化组合模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测 目录 强推!创新直发核心!时序分解优化组合模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测效果一览基…

kubernetes集群部署Zabbix监控平台

一、zabbix介绍 1.zabbix简介 Zabbix是一个基于Web界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数,保障服务器及设备的安全运营。 2.zabbix特点 (1)安装与配置简单。 (2)可视化web管理界面。 &a…

【超简单】1分钟解决ppt全文字体一键设置

省流 ppt的全部字体需要在“幻灯片母版”里面,“自定义字体”去设置好标题与正文的字体之后才算全部设置完毕 “视图”---“幻灯片母版” 找到“字体”---“自定义字体” 设置好中文和西文的字体,都可以按照自己的选择来,保存即可 吐槽 之…

【路径规划】一种用于控制约束高维非线性系统的神经路径规划算法

摘要 本研究提出了一种神经路径规划算法,用于解决高维非线性系统在约束条件下的控制问题。该方法结合了人工神经网络(ANN)和快速随机树(RRT)算法,通过神经网络对复杂系统的动态进行建模,并使用…

万物皆可“浮动”(补充)——WEB开发系列33

​​float​​ 属性最初的设计目的是在文本块内使图像浮动,从而让文字环绕在图像的左右两侧,这种效果在报纸版面中很常见。随着时间的推移,这一属性已成为网页设计中实现多列布局的常用工具。最开始,​​float​​ 主要用于在文本…

YOLOv8改进 | 检测头篇 | YOLOv8引入DynamicHead检测头

1. DynamicHead描述 1.1 摘要:在目标检测中,定位和分类相结合的复杂性导致了各种方法的蓬勃发展。以往的工作试图提高各种目标检测头的性能,但未能呈现出统一的观点。本文根据目标检测的特点,推导了一种新的动态头部框架,将目标检测头部与注意力统一起来。该方法通过在特…

物联网之ESP32开发板简介、Arduino

MENU ESP32开发板ESP32开发方式Arduino是什么 ESP32开发板 ESP32是一款国产芯片,芯片专为移动设备、可穿戴设备与物联网应用而设计,集成了低功耗蓝牙和Wi-Fi。这也是为什么ESP32在DIY爱好者中备受推崇的原因。 序号功能1复位按键2MicroUSB接口&#xff…

如何给3D人物换衣服CC4

1.导入人物 2.设置人物Apose 3.导入衣服 create -> accessory 选择fbx文件 设置衣服的大小和位置。 4.绑定衣服 设置衣服的权重 添加动作就可以看效果了。

神仙公司名单(北京)

神仙公司(北京) 接着奏乐接着舞,神仙公司系列。 这次写之前几期评论区呼声极高的城市:北京。 北京,是许多人外出打工的梦想之都,是年轻人逃离农村的终点站。 在近两年的就业蓝皮书「外省籍毕业生占比较高城…

移动互联网背景下营销模式的探索与分析

摘要:本文深入探讨在移动互联网蓬勃发展的背景下的营销理念变革。详细分析品牌对效果的承诺、转化周期的多元性以及品效合一的实现途径。同时重点引入“链动 2 1 模式 AI 智能名片 S2B2C 商城小程序源码”相关元素,深入挖掘其在营销领域的应用潜力与价值…

【原创】java+swing+mysql密码管理器系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片,希望和大家…

vllm使用BitAndBytes量化模型失败

ValueError: BitAndBytes quantization with TP or PP is not supported yet 使用加载hf模型时,使用load_in_8bit来量化模型(底层其实是调用bitsandbytes来量化): import argparse import os import torchdef parse_arguments()…

TCP Analysis Flags 之 TCP Port numbers reused

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

分库分表核心理念

文章目录 分库,分表,分库分表什么时候分库?什么时候分表?什么时候既分库又分表?横向拆分 & 纵向拆分 分表算法Range 范围Hash 取模一致性 Hash斐波那契散列 严格雪崩标准(SAC)订单分库分表实…

外卖会员卡项目骗局揭秘,你还在做梦吗?改醒醒了

大家好,我是鲸天科技千千,大家都知道我是做开发的,做互联网行业很多年了,平时会在这里给大家分享一些互联网相关的小技巧和小项目,感兴趣的给我点个关注。 关于外卖会员卡这个项目的一些骗局和套路,我真的…

DNS64/NAT64 Networks(解决苹果公司IPv6审核被拒)

本人亲测有效,参考下面文章: https://www.cnblogs.com/zhouyi-ios/p/6945471.html 摘抄文章中的DNS64/NAT64原理 1、蜂窝网络单独提供IPv4和IPv6连接。 2、DNS64/NAT64转换工作流 理想的是,提供商放弃支持IPv4网络,然而这样阻…

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all; x 1:3; aa[28.6321521955954 26.2453660695847 21.6910234851208 6.93747104431360 6.25442246899816 3.342835958564…