副问题[/!--empirenews.page--]
一、SpEL 表达式注入
Spring Expression Language(简称 SpEL)是一种成果强盛的表达式说话、用于在运行时查询和操纵工具图;语法上相同于 Unified EL,但提供了更多的特征,出格是要领挪用和根基字符串模板函数。SpEL 的降生是为了给 Spring 社区提供一种可以或许与 Spring 生态体系全部产物无缝对接,能提供一站式支持的表达式说话。
二、SpEL 表达式
- 根基表达式:字面量表达式、相关,逻辑与算数运算表达式、字符串链接及截取表达式、三目运算、正则表达式以及括号优先级表达式;
- 类相干表达式:类范例表达式、类实例化、instanceof 表达式、变量界说及引用、赋值表达式、自界说函数、工具属性存取及安详导航表达式、工具要领挪用、Bean 引用;
- 荟萃相干表达式:内联 List、内联数组、荟萃、字典会见、列表、字典;
- 其他表达式:模版表达式
三、SpEL 基本
在 pom.xml 导入 maven 或是把”org.springframework.expression-3.0.5.RELEASE.jar”添加到类路径中
- <properties>
- <org.springframework.version>5.0.8.RELEASE</org.springframework.version>
- </properties>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-expression</artifactId>
- <version>${org.springframework.version}</version>
- </dependency>
1. SpEL 行使方法
SpEL 在求表达式值时一样平常分为四步,个中第三步可选:起首结构一个理会器,其次理会器理会字符串表达式,在此结构上下文,最后按照上下文获得表达式运算后的值。
- ExpressionParser parser = new SpelExpressionParser();
- Expression expression = parser.parseExpression("('Hello' + ' freebuf').concat(#end)");
- EvaluationContext context = new StandardEvaluationContext();
- context.setVariable("end", "!");
- System.out.println(expression.getValue(context));
- 建设理会器:SpEL 行使 ExpressionParser 接口暗示理会器,提供 SpelExpressionParser 默认实现;
- 理会表达式:行使 ExpressionParser 的 parseExpression 来理会响应的表达式为 Expression 工具。
- 结构上下文:筹备好比变量界说等等表达式必要的上下文数据。
- 求值:通过 Expression 接口的 getValue 要领按照上下文得到表达式值。
2. SpEL 首要接口
1.ExpressionParser 接口:暗示理会器,默认实现是 org.springframework.expression.spel.standard 包中的 SpelExpressionParser 类,行使 parseExpression 要领将字符串表达式转换为 Expression 工具,对付 ParserContext 接口用于界说字符串表达式是不是模板,及模板开始与竣事字符;
- public interface ExpressionParser {
- Expression parseExpression(String expressionString);
- Expression parseExpression(String expressionString, ParserContext context);
- }
事例 demo:
- ExpressionParser parser = 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 '}#{'freebuf!'}";
- Expression expression = parser.parseExpression(template, parserContext);
- System.out.println(expression.getValue());
演示的是行使 ParserContext 的环境,此处界说了 ParserContext 实现:界说表达式是模块,表达式前缀为「#{」,后缀为「}」;行使 parseExpression 理会时传入的模板必需以「#{」开头,以「}」末了。
默认传入的字符串表达式不是模板情势,如之前演示的 Hello World。
- EvaluationContext 接口:暗示上下文情形,默认实现是 org.springframework.expression.spel.support 包中的 StandardEvaluationContext 类,行使 setRootObject 要领来配置根工具,行使 setVariable 要领来注册自界说变量,行使 registerFunction 来注册自界说函数等等。
- Expression 接口:暗示表达式工具,默认实现是 org.springframework.expression.spel.standard 包中的 SpelExpression,提供 getValue 要领用于获取表达式值,提供 setValue 要领用于配置工具值。
3. SpEL 语法 – 类相干表达式
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|