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学习-表达式语言的更多相关文章

  1. Spring讲解-----------表达式语言

    转自:https://blog.csdn.net/u011225629/article/details/47143083 5.1  概述5.1.1  概述       Spring表达式语言全称为“S ...

  2. spring spel表达式语言

    一.通过bean的id对bean进行引用 1.对其他bean的引用 <property name="dept" value="#{dept}"/> ...

  3. Spring学习二

    Spring的表达式语言 SpEL,使用方法是#{} SpEL的特性如下 使用Bean 的ID 来引用Bean : 调用方法和访问对象的属性: 对值进行算术.关系和逻辑运算: 正则表达式匹配: 集合操 ...

  4. Spring学习笔记--Spring简介

    1.spring:给软件行业带来了春天; 2.spring的理念:spring框架的初衷是使的现有的更加实用,spring不是创造轮子(技术或框架),而是使现有的轮子更好的运转;spring本身是一个 ...

  5. Spring学习(六)—— Spring注解(二)

    核心原理 1.       用户发送请求给服务器.url:user.do 2.       服务器收到请求.发现Dispatchservlet可以处理.于是调用DispatchServlet. 3.  ...

  6. Spring EL表达式和资源调用

    Spring EL表达式     Spring EL-Spring表达式语言,支持在xml和注解中使用表达式,类似于在jsp的EL表达式语言.     Spring 开发中经常涉及调用各种资源的情况, ...

  7. Spring学习记录(七)---表达式语言-SpEL

    SpEL---Spring Expression Language:是一个支持运行时查询和操作对象图表达式语言.使用#{...}作为定界符,为bean属性动态赋值提供了便利. ①对于普通的赋值,用Sp ...

  8. Spring学习总结(四)——表达式语言 Spring Expression Language

    SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用 ...

  9. Spring学习笔记--Spring表达式语言SpEL

    Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...

随机推荐

  1. 【Maven】maven的常用命令以及搭建maven私人仓库

    一.maven环境搭建 1. 二.maven常用命令 1.创建一个新的项目: mvn archetype:create -DgroupId=com.puyangsky.test -DartifactI ...

  2. HTTP Slow Attack测试工具SlowHTTPTest

    HTTP Slow Attack测试工具SlowHTTPTest   Slow Attack是HTTP常见的一种拒绝服务攻击方式.它通过消耗服务器的系统资源和连接数,导致Web服务器无法正常工作.常见 ...

  3. Xamarin Android项目真机测试闪退

    Xamarin Android项目真机测试闪退 项目在模拟器中运行正常,但在真机上闪退.这是由于项目设置使用共享的Mono运行时.Visual Studio中,在项目属性-Android Option ...

  4. 初见Python<4>:字典

    序列是python中的一种数据结构,映射是另一种.映射(mapping)通过名字来引用值.python内建的唯一一种映射结构是字典.字典中的值没有特殊的顺序,但都存储在一个特定的键中.键可以是数字.字 ...

  5. BZOJ 2697 特技飞行(贪心)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2697 [题目大意] 神犇航空开展了一项载客特技飞行业务. 每次飞行长N个单位时间,每个 ...

  6. BZOJ 1433 [ZJOI2009]假期的宿舍(网络流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1433 [题目大意] 在校学生有自己的床,外校的则没有,如果两个同学相互认识,则可以借用 ...

  7. 【最小割】【Dinic】Gym - 101128F - Landscaping

    http://blog.csdn.net/lxy767087094/article/details/68942422 #include<cstdio> #include<cstrin ...

  8. 【MySQL笔记】触发器,存储过程和函数

    一.触发器 触发器(TRIGGER):是由事件来触发某个操作.当数据库系统执行这些事件时,就会激活触发器执行相应的操作.MySQL从5.0.2版本开始支持触发器. 触发事件:INSERT语句.UPDA ...

  9. Java高级架构师(一)第37节:反向代理和动静分离的实现

    http协议->server->location 输入http:locahost:80/ 进入百度的界面. 做负载转发测试.路径已经转发,可能一些协议已经屏蔽了,导致内容出不来. 关于负载 ...

  10. 解决 javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

    解决这个异常的重点就在于下载两个jar包: bcprov-ext-jdk15on-1.52 bcprov-jdk15on-1.52 传送门:https://stackoverflow.com/ques ...