Spring-表达式语言
概念及作用
Spring表达式语言全称为“Spring Expression Language”,缩写为“SPEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性对象方法调用 等等,并且能与Spring功能完美整合,如能用来配置Bean定义。
表达式语言给静态Java语言增加了动态功能。
SPEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用。
支持形式(不区分大小写):
一、基本表达式:字面量表达式、关系,逻辑与算数运算表达式、字符串连接及截取表达式、三目运算及Elivis表达式、正则表达式、括号优先级表达式;
二、类相关表达式:类类型表达式、类实例化、instanceof表达式、变量定义及引用、赋值表达式、自定义函数、对象属性存取及安全导航表达式、对象方法调用、Bean引用;
三、集合相关表达式:内联List、内联数组、集合,字典访问、列表,字典,数组修改、集合投影、集合选择;不支持多维内联数组初始化;不支持内联字典定义;
四、其他表达式:模板表达式。
测试实例:
public class SpelTest {
@Test
public void spelTest(){
ExpressionParser expressionParser = new SpelExpressionParser();
ParserContext parserContext = new ParserContext() {
@Override
public boolean isTemplate() {
return true;
}
@Override
public String getExpressionPrefix() { //前缀表达式
return "#{";
}
@Override
public String getExpressionSuffix() { //后缀表达式
return "}";
}
};
String template = "#{'Hello '}#{'abl '}#{'World!'}"; //表达式
Expression expression = expressionParser.parseExpression(template, parserContext);
//注 必须完全匹配
Assert.assertEquals("Hello abl World!", expression.getValue());
}
}
注:默认传入的字符串表达式不是模板形式
2)EvaluationContext接口: 表示上下文环境,默认实现是org.springframework.expression.spel.support包中的 StandardEvaluationContext类,使用setRootObject方法来设置根对象,使用setVariable方法来注册自定义 变量,使用registerFunction来注册自定义函数等等。

3)Expression接口:表示表达式对象,默认实现是org.springframework.expression.spel.standard包中的SpelExpression,提供getValue方法用于获取表达式值,提供setValue方法用于设置对象值。

SpEL语法:
String str1 = parser.parseExpression("'Hello World!'").getValue(String.class);
String str2 = parser.parseExpression("\"Hello World!\"").getValue(String.class);
加减乘除
int result1 = parser.parseExpression("1+2-3*4/2").getValue(Integer.class);//-3
关系表达
等 于(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=),区间(between)运算
逻辑表达式:
且(and)、或(or)、非(!或NOT)。
String expression2 = "2>1 and (NOT true or NOT false)";
boolean result2 = parser.parseExpression(expression2).getValue(boolean.class);
Assert.assertEquals(true, result2);
字符串连接及截取表达式:使用“+”进行字符串连接
三目运算符 “表达式1?表达式2:表达式3”用于构造三目运算表达式,如“2>1?true:false”将返回true;
正则表达式:使用“str matches regex,如“'123' matches '\\d{3}'”将返回true;
括号优先级表达式:使用“(表达式)”构造,括号里的具有高优先级。
类相关表达式
这块东西实在太枯燥了,没有意思,不写了
Spring-表达式语言的更多相关文章
- Spring表达式语言 之 5.1 概述 5.2 SpEL基础(拾叁)
5.1 概述 5.1.1 概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts ...
- 开涛spring3(5.1&5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础
5.1 概述 5.1.1 概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行 ...
- Spring表达式语言SpEL
Spring表达式语言,简称SpEL,是一个支持运行时查询和操作对象图的强大的表达式语言.语法类似于EL:SpEL使用#{…}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean属 ...
- Spring学习笔记--Spring表达式语言SpEL
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...
- 使用Spring表达式语言进行装配
1.1注入外部的值 Spring中,处理外部值的最简单方式就是声明属性源并通过Spring的Environment来检索属性.例如,程序清单3.7展现了一个基本的Spring配置类,它使用外部的属性来 ...
- Spring表达式语言之SpEL
•Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. •语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL ...
- Spring表达式语言:SpEL
1.Spring表达式语言(简称:SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 2.语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号内的字符都被认为是SpEL. 3 ...
- Spring表达式语言SpEL简单介绍
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有非常多特性.比較经常使用的包含: 1.使用bean的id来引用bean, 以下 ...
- Spring ——表达式语言 Spring Expression Language (转载)
目录 SpEL简介与功能特性 一.为什么需要Spring表达式语言 二.SpEL表达式Hello World! 三.SpEL表达式 3.1.文字表达式 3.2.SPEL语言特性 3.2.1.属性 3. ...
- Spring基础13——Spring表达式语言:SpEL
1.SpEL简介 Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言.语法上类似于EL:SpEL使用#{...}作为界定符,所有在大框号中的字符都将被认为是Sp ...
随机推荐
- JavaMap的一些常用方法
package exam; import java.util.Collection; import java.util.HashMap; import java.util.Map; import ja ...
- RPC概念及分类【转载】
RPC概念及分类 RPC全称为Remote Procedure Call,翻译过来为“远程过程调用”.目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程通信和相互调用 ...
- reset Cisco 2960 password
详见:http://www.cahilig.net/2014/04/14/how-reset-cisco-2960-switch-password-without-losing-your-config ...
- [转]Linux中python3.6+ipython+Jupyter Notebook环境
python3.6安装 下载python安装包,这里下载的最新的3.6.1版本 https://www.python.org/ftp/python/3.6.1/ 将安装包上传到服务器并解压 tar z ...
- web.py模块使用
web.py模块 import time import web urls=("/",'hello') class hello(): def GET(self): return (t ...
- monitor.sh
#!bin/bash message_counts="" succeed_counts="" all_succeed_counts="" f ...
- WMware 中CentOS系统Hadoop 分布式环境搭建(一)——Hadoop安装环境准备
1.创建3台虚拟机并装好系统,这里使用64位CentOS. 2.Ping测试[确保两两能ping通]: [ping xxx.xxx.xxx.xxx] 3.安装SSH:[yum install ssh ...
- ssh方式请求gitlab需要密码解决方法
问题:gitlab是使用docker安装的,配置好公钥私钥后,请求gitlab一直需要输入密码,而且这个密码输入什么都不对. 原因:后来发现是因为docker做了端口映射,如使用宿主机的10022映射 ...
- 学会学习:高效学习方式(使用vscode-snippet有感)
入职以来我们团队一直都在使用vscode编辑器,后来也有人开始使用webstorm.很久之前我突然为每天重复的编写.vue文件里面的export.<script lang="scss& ...
- truffle init 从零开始创建简单DApp项目
下面的部分软件需要FQ.这里默认你已经会***,不懂的可以自己搜索解决. 软件安装 chrome浏览器 下载地址 metamask插件 在谷歌应用商店中搜索metamask ganche(图形版) 下 ...