11-spring学习-表达式语言
1,表达式语言的操作形式以及处理流程。
2,在spring中各种表达式字符串的编写。
SPEL(spring Express language)
表达式入门
观察一下表达式:
范例:表达式操作
1)基础参考(如果不使用表达式,实现同样的功能):
package com.Spring.ELDemo;
public class TestSimple {
public static void main(String[] args) {
String str=("Hello"+" word").substring(,);
System.out.println(str);
}
}
2)表达式实现:
以上是通过硬编码形式完成,必须有String类对象,而后才可以利用 “对象.方法” 形式进行操蛋的调用:
package com.Spring.ELDemo; import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestSimple { public static void main(String[] args) { String pstr="(\"Hello\"+\"word\").substring(5,9)";
//定义解析器
ExpressionParser parser=new SpelExpressionParser();
//解析给出的字符串表达式
Expression exp=parser.parseExpression(pstr);
EvaluationContext context=new StandardEvaluationContext();
System.out.println(exp.getValue(context));
}
}
执行结果:

spring表达式操作过程中,可以将一个字符串变为可以用于程序执行的语句。当然这一系列语句需要有一系列支持类完成。
字符串的功能,又一次被加强了。
在本程序给出了以下程序类:
1,表达式解析器:ExpressionParser:
复杂根据给出的表达式字符串内容对解析操作进行处理;
2,解析器处理类:SpelExpressionParser:
ExpressionParser本身只是操作的标准,但是它对应的处理类,必须单独设置,本次使用的是SPel的标准处理;
3,表达式:Expression:
将字符串根据指定的解析器进行解析,而后使用这个生成的表达式。
4,设置表达式的属性信息:EvaluationContext:
因为表达式的操作过程可能会存在一些占位符(如下面这个例子的#start,#end)需要进行处理。
范例:定义操作的参数:
package com.Spring.ELDemo; import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestSimple { public static void main(String[] args) { //1,定义要操作的表达式,使用者更多关注与此部分
String pstr="(\"Hello\"+\"word\").substring(#start,#end)";
//2,要定义表达式解析器,本次使用的是SpEl表达式解析器
ExpressionParser parser=new SpelExpressionParser();
//3,使用特定的解析器(parser)来处理指定字符串操作
Expression exp=parser.parseExpression(pstr);
//4,定义相关的环境属性,
EvaluationContext context=new StandardEvaluationContext();
context.setVariable("start", 5);
context.setVariable("end", 9);
System.out.println(exp.getValue(context));
}
}
以上定义的表达式字符串里面,设置了两个参数,#start,#end。
通过EvaluationContext实例对象,设置环境属性的值参数值。
表达式处理原理
需要明确的是,使用表达式过程中,除了可以利用字符串操作外,还可以数学操作。
package com.Spring.ELDemo;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext; public class TestSimple2 { public static void main(String[] args) { String pstr="1+2";
ExpressionParser parser=new SpelExpressionParser();
Expression exp=parser.parseExpression(pstr);
EvaluationContext context=new StandardEvaluationContext();
System.out.println(exp.getValue(context));
}
}
操作结果:

可以发现,除了编写字符串之外,还可以编写数字,甚至各种字符串的数据。那么如果是我们自己编写这种表达式,那么一定要对其进行一个判断。
判断表达式应该有哪些组成,而后拆分组成的内容,最好要进行字符串的相关类型的转换。从而得出最终的计算结果。
操作流程

1,首先必须按照指定的结构要求定义表达式,例如:“1+2”.
2,随后需要转变出SpEl的解析器,进行解析的时候,需要按照如下的步骤进行:
1)使用专门的断词器将给定的表达式字符串拆分为spring可以认可的数据格式。
2)随后要根据断词器处理的操作结果,生成相应的语法结构。
3)并且这一个过程中,需要进行表达式对错检查。
3,将已经处理后的表达式定义到一个专门的表达式对象之中,等待最终的结果计算。
4,但是考虑到表达式可能存在部分占位变量内容,所以进行表达式计算之前,需要设置一个表达式上下文对象,进行占位变量内容处理。
5,设置好了变量内容,并且利用表达式对象,就可以计算出表达式最终执行的结果。
11-spring学习-表达式语言的更多相关文章
- Spring讲解-----------表达式语言
转自:https://blog.csdn.net/u011225629/article/details/47143083 5.1 概述5.1.1 概述 Spring表达式语言全称为“S ...
- spring spel表达式语言
一.通过bean的id对bean进行引用 1.对其他bean的引用 <property name="dept" value="#{dept}"/> ...
- Spring学习二
Spring的表达式语言 SpEL,使用方法是#{} SpEL的特性如下 使用Bean 的ID 来引用Bean : 调用方法和访问对象的属性: 对值进行算术.关系和逻辑运算: 正则表达式匹配: 集合操 ...
- Spring学习笔记--Spring简介
1.spring:给软件行业带来了春天; 2.spring的理念:spring框架的初衷是使的现有的更加实用,spring不是创造轮子(技术或框架),而是使现有的轮子更好的运转;spring本身是一个 ...
- Spring学习(六)—— Spring注解(二)
核心原理 1. 用户发送请求给服务器.url:user.do 2. 服务器收到请求.发现Dispatchservlet可以处理.于是调用DispatchServlet. 3. ...
- Spring EL表达式和资源调用
Spring EL表达式 Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于在jsp的EL表达式语言. Spring 开发中经常涉及调用各种资源的情况, ...
- Spring学习记录(七)---表达式语言-SpEL
SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...
- Spring学习总结(四)——表达式语言 Spring Expression Language
SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用 ...
- Spring学习笔记--Spring表达式语言SpEL
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...
随机推荐
- ActiveMQ 认证(一)
新搭建的ActiveMQ服务,在发布和读取消息时,连接的权限为ActiveMQConnection.DEFAULT_USER和ActiveMQConnection.DEFAULT_PASSWORD. ...
- 【HDU 5283】Senior's Fish
http://acm.hdu.edu.cn/showproblem.php?pid=5283 今天的互测题,又爆零了qwq 考虑每个点对答案的贡献. 对每个点能产生贡献的时间线上的左右端点整体二分. ...
- [CODECHEF]SEGPROD
题意:给定$a_{1\cdots n}$和$p$,多次询问$\prod\limits_{i=l}^ra_i$对$p$取模的值,强制在线,每次询问要求$O(1)$回答 一个微小的黑科技... 静态区间查 ...
- 【分类讨论】【set】Codeforces Round #407 (Div. 2) B. Masha and geometric depression
模拟一下那个过程,直到绝对值超过l,或者出现循环为止. 如果结束之后,绝对值是超过l的,就输出当前写在黑板上的数量. 如果出现循环,则如果写在黑板上的数量非零,则输出inf(注意!如果陷入的循环是一个 ...
- MySQL InnoDB引擎锁的总结
为什么要锁 我们开的的各式各样系统中,系统运行需要CPU.内存.I/O.磁盘等等资源.但除了硬资源外,还有最为重要的软资源:数据. 当人们访问操作我们的系统时,其实归根是对数据的查看与生产.那么对于同 ...
- 【MySQL笔记】字符串、时间日期转换
1.新增一列,将字符串日期(年.月.日)转换为Date类型 报错:Error Code: 1175. You are using safe update:http://jingyan.baidu. ...
- codevs 2185 最长公共上升子序列--nm的一维求法
2185 最长公共上升子序列 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目 ...
- concat函数,concat_ws函数,group_concat函数,repeat()函数
MySQL中concat函数使用方法:CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...
- 既然有文件后缀名,为何还需要MIME类型?
作者:Vincross链接:https://www.zhihu.com/question/60495696/answer/204530120来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...
- redis(一)Windows下安装redis服务、搭建redis主从复制
接下来会写一个redis实战系列,在此记录,有什么问题大家请随时批评. 好了,进入正题,这篇会将redis以windows服务形式提供服务(搭建一个简单的主从复制 M:6379:s:6380.6381 ...