SpEL 表达式注入
Spring Expression Language(简称 SpEL)是一种功能强大的表达式语言、用于在运行时查询和操作对象图;语法上类似于 Unified EL,但提供了更多的特性,特别是方法调用和基本字符串模板函数。SpEL 的诞生是为了给 Spring 社区提供一种能够与 Spring 生态系统所有产品无缝对接,能提供一站式支持的表达式语言。
SpEL 表达式
- 基本表达式
- 类相关表达式
- 集合相关表达式
- 其他表达式
SpEL 使用方式代码中使用
SpEL 在获取表达式值时一般分为四步,其中第三步可选:
- Step1. 首先构造一个解析器
- Step2. 解析器解析字符串表达式
- Step3. 在此构造上下文
- Step4. 根据上下文得到表达式运算后的值
示例代码:
1 | ExpressionParser parser = new SpelExpressionParser();//Step1 |
其中:
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打开后使用