当前位置: 首页 > 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;}
}

http://www.mrgr.cn/news/22259.html

相关文章:

  • 【Shell】在shell脚本中$的使用方法
  • Leetcode 两数之和
  • C++之格式化日期时间为字符串(精确到毫秒)
  • 【软考】希尔排序算法分析
  • 安装diffvg
  • 博客系统自动化测试报告
  • Redis 事务
  • 屏保壁纸 芝麻时钟比屏保壁纸更好看的桌面动态屏保 大气美观
  • 人工智能数据基础之微积分入门-学习篇
  • 363_C++_配合360_负责读取和处理录像数据RecordReader类
  • gdb中使用python脚本
  • 九,自定义转换器详细操作(附+详细源码解析)
  • Python编码系列—Python项目管理:掌握高效工具与实践
  • python之异步任务
  • 《JavaEE进阶》----12.<SpringIOCDI【扫描路径+DI详解+经典面试题+总结】>
  • HarmonyOS -服务卡片
  • 滚雪球学MyBatis(04):数据模型与Mapper接口
  • 10分钟教你使用docker在本地部署Wordpress
  • @Value读取properties中文乱码解决方案
  • c++基础版