SpEL表达式注入

SpEL 表达式注入

Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言、用于在运行时查询和操作对象图;语法上类似于 Unified EL,但提供了更多的特性,特别是方法调用和基本字符串模板函数。SpEL 的诞生是为了给 Spring 社区提供一种能够与 Spring 生态系统所有产品无缝对接,能提供一站式支持的表达式语言。

SpEL 表达式

  • 基本表达式
  • 类相关表达式
  • 集合相关表达式
  • 其他表达式

SpEL 使用方式代码中使用

SpEL 在获取表达式值时一般分为四步,其中第三步可选:

  • Step1. 首先构造一个解析器
  • Step2. 解析器解析字符串表达式
  • Step3. 在此构造上下文
  • Step4. 根据上下文得到表达式运算后的值

示例代码:

1
2
3
4
5
6
 ExpressionParser parser = new SpelExpressionParser();//Step1
Expression expression = parser.parseExpression("('test' + ' security').concat(#end)");
//parser构造器 解析 字符串('test' + ' security').concat(#end)
EvaluationContext context = new StandardEvaluationContext();//Step3
context.setVariable("end", "!");
System.out.println(expression.getValue(context));//Step4获取expression的值

其中:

Step1中 ExpressionParser 接口new SpelExpressionParser):表示解析器,默认实现是 org.springframework.expression.spel.standard 包中的 SpelExpressionParser 类,使用 parseExpression 方法将字符串表达式转换为 Expression 对象,对于 ParserContext 接口用于定义字符串表达式是不是模板,及模板开始与结束字符

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

Step3中 EvaluationContext 接口new StandardEvaluationContext):表示上下文环境,默认实现是 org.springframework.expression.spel.support 包中的 StandardEvaluationContext 类,使用 setRootObject 方法来设置根对象,使用 setVariable 方法来注册自定义变量,使用 registerFunction 来注册自定义函数等等。

类的类型表达式

类的类型表达式:使用”T(Type)”来表示 java.lang.Class 实例

我这样理解:”Type”默认是”java.lang”包,因此如果是”java.lang”可以不指名,其他类均需要指定包名;

使用类类型表达式还可以进行访问类静态方法及类静态字段。

类实例化:类实例化同样使用 java 关键字「new」,除默认的 java.lang 包内的类型除外,如 String、Integer,其他类名需要是全限定名。

审计初试

git clone https://github.com/spring-guides/gs-messaging-stomp-websocket git checkout 6958af0b02bf05282673826b73cd7a85e84c12d3

使用IDEA打开后使用

本文标题:SpEL表达式注入

文章作者:

发布时间:2019年08月17日 - 10:33:12

最后更新:2019年08月18日 - 16:15:10

原始链接:http://laker.xyz/2019/08/17/SpEL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B3%A8%E5%85%A5/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。