SpringEL 表达式:一种功能强大的表达式语言

本文详细介绍了Spring表达式语言(SpEL)的概述、语法特性和丰富的示例,包括属性占位符、表达式计算、操作符、数学与逻辑表达式、数组构造、集合操作及安全导航等,展示了SpEL在运行时操纵对象图的强大功能。
摘要由CSDN通过智能技术生成

文章有参看其他博主博客

  • https://blog.csdn.net/drxRose/article/details/85085716?utm_source=distribute.pc_relevant.none-task
  • https://blog.csdn.net/weixin_30340745/article/details/99152894?utm_source=distribute.pc_relevant.none-task
  • https://blog.csdn.net/u011305680/article/details/80271423
  • https://www.cnblogs.com/wangzhongqiu/archive/2018/08/24/9530454.html
一、概述:
  • Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言。

  • 类似于JSP的el表达式,但SpringEL提供了更多的功能,最主要的是显式方法调用和基本字符串模板函数

  • SpEL作为Spring目录中表达式求值的基础,它并不是直接依赖于Spring而是可以被独立使用。

  • SpringEL功能特性

    字符表达式,布尔和关系操作符,正则表达式,类表达式,访问properties,arrays,lists,maps,
    方法调用,关系操作符,赋值,调用构造器,三元操作符,变量,用户自定义函数,集合投影,集合选择,模板表达式
    
二、SpEL语法
  • SpringEL基础语法格式为#{...}或者${...}。其中以 开 头 的 被 称 为 属 性 占 位 符 , 只 能 用 来 取 值 , 不 能 进 行 表 达 式 计 算 , 比 如 我 们 常 见 的 @ V a l u e ( 开头的被称为属性占位符,只能用来取值,不能进行表达式计算,比如我们常见的@Value( @Value({userName})就是从配置文件取值。以**#**开头的可以进行表达式计算,例如#{T(java.lang.Math).PI}

  • SpringEL支持的操作符如下

    语法 说明 示例
    字面量 使用单引号或者通过转义双引号。 “null”, " “jack” "
    集合(properties,lists,maps,arrays) 像list,map,array等集合可以调用其方法 “list.get(0)”
    索引器 使用符号[]可以访问其成员 “list[0]”
    内部初始化(inner lists/maps) 格式:{value}或{key:value},成员以逗号分隔 " {0,1,2,3,4} “或” {0:name,1:age,3:gender} "
    数组构造器(new 操作符) 直接在表达式中,可初始化并分配数组 " new int[3] ";支持所有的数组初始化语法
    比较操作符 可使用比如>,<,=等等的比较运算符 “3<5”
    逻辑操作符 表达式中的逻辑操作符,使用and,or和not " ‘a’ =.= ‘a’ or ‘b’ =.=‘c’ "
    算术操作符 表达式支持的有+,-,*,/,%,^(平方)等等 " 5+3+2*10 "
    instanceof操作符 " obj instanceof Type ",返回Boolean类型 “‘jack’ instanceof T(java.lang.String)”
    matches操作符 正则匹配,支持大部分的匹配符 " str matches ‘regex expression’ "
    类型引用操作符 T() 可以引用具体的类
    java.lang包中的引用不需全类名,反之使用.
    " T(Math).random() "
    new操作符 使用new操作符可实例化对象,但应使用全类名 " new java.util.ArrayLis() "
    变量引用操作符# 与求值上下文有关,内置的有#this和#root " #var "
    bean引用操作符@ 可引用容器中注册的bean,依据beanName " @beanName "
    三元操作符 ?: 类似于java的三元操作符 " 1+1 == 2 ? ‘y’:‘n’ "
    安全导航操作符? 考虑空值异常的情况,若使用?操作符,遇到此异常时,不抛出,而是返回null. " list?.get(12) "
三、示例

创建EL parser解析器

    public static void main(String[] args) {
   
        ExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression("表达式");
        StandardEvaluationContext context = new StandardEvaluationContext();
        System.out.println(expression.getValue(context));
    }
  • 注入值
public
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EL表达式 (详解) EL表达式 1、EL简介 1)语法结构 ${expression} 2)[]与.运算符 EL 提供.和[]两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。 例如: ${user.My-Name}应当改为${user["My-Name"] } 如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如: ${sessionScope.user[data]}中data 是一个变量 3)变量 EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为 username的变量。 因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、 Application范围查找。 假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时, 就回传null。 属性范围在EL中的名称 Page PageScope Request RequestScope Session SessionScope Application ApplicationScope 4) 1--EL表达式用${}表示,可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码. 2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组 值.pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话 范围内的变量.applicationScope表示应用范围的变量. 3 -- 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁 止.JSP2.0中默认的启用EL语言. 4-- EL语言可显示 逻辑表达式如${true and false}结果是false 关系表达式如${5>6} 结 果是false 算术表达式如 ${5+5} 结果是10 5--EL中的变量搜
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值