| 
                        副标题[/!--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 语法 – 类相关表达式 
                                                (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |