Spring el表达式的入门使用及简单封装

Spring基本篇
placeholder image
admin 发布于:2019-04-04 21:40:04
阅读:loading

本篇文章带你入个小门,实现3个小小的示例以及spel表达式的简单封装,其中3个示例分别为① 变量的引用、② 字符串与变量拼接、③ 字符串的函数调用(String的函数调用);简单封装为set设置值与get取值的简单实现,代码比较简单,参考如下:

代码示例

package cn.chendd;

import org.junit.Before;
import org.junit.Test;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

public class SimpleSpringElTest {

   //表达式上下文
   
protected EvaluationContext context;
   //解析器
   
protected ExpressionParser parser;

   @Before
   
public void init(){
       context = new StandardEvaluationContext();
       parser = new SpelExpressionParser();
   }

   /**
    *
设置变量参数
   
*/
   
public <T> SimpleSpringElTest set(String name , T value){
       context.setVariable(name , value);//设置变量
       
return this;
   }

   /**
    *
根据上下文解析表达式
   
*/
   
public <T> T get(String eval , Class<T> clazz){
       return parser.parseExpression(eval).getValue(context , clazz);
   }

   /**
    *
引用一个变量hello
    */
   
@Test
   
public void testHello(){
       set("hello" , "chendd");//设置变量,变量名称为hello,值为chendd
       
String eval = "#hello";//引用变量
       
//解析变量表达式
       
String value = get(eval , String.class);
       System.out.println("输出一个变量表达式:" + value);
   }

   /**
    *
字符串常亮与一个变量拼接
   
*/
   
@Test
   
public void testHelloChendd(){
       set("name" , "chendd");
       String eval = "'hello,' + #name";//引用变量
       
//解析变量表达式
       
String value = get(eval , String.class);
       System.out.println("输出字符串常亮与一个变量拼接:" + value);
   }

   /**
    *
调用字符串类型的转换为大写函数,输出大写
   
*/
   
@Test
   
public void testHelloFunction(){
       set("name" , "chendd");//变量不能不存在或为空,否则报错
       
//解析变量表达式
       
String eval = "'hello,' + #name.toUpperCase()";//引用变量
       
String value = get(eval , String.class);
       System.out.println("字符串常量+变量+变量函数:" + value);
   }

}

Test运行结果

image.png

SpelStandUtil简单封装

spel的简单封装,涵盖了根据表达式返回对象、根据表达式返回指定泛型对象、设置一个参数(可链式多组)、设置一组参数,比较简单的写法,参考如下:

package cn.chendd.utils;

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

import java.util.Map;

public final class SpelStandUtil {

    
//表达式上下文
    
private StandardEvaluationContext context;
    
//解析器
    
private ExpressionParser parser;

    
public SpelStandUtil(){
        
context new StandardEvaluationContext();
        
parser new SpelExpressionParser();
    }

    
public SpelStandUtil set(String name , Object value){
        
context.setVariable(name, value);
        
return this;
    }

    
public SpelStandUtil sets(Map<String , Object> varMap){
        
context.setVariables(varMap);
        
return this;
    }

    
public Object get(String eval){
        Object value = 
parser.parseExpression(eval).getValue(context);
        
return value;
    }

    
public <Tget(String eval , Class<T> clazz){
        
value = parser.parseExpression(eval).getValue(context , clazz);
        
return value;
    }

}


 点赞


 发表评论

当前回复:作者

 评论列表


留言区