登录 
欢迎来到陈冬冬(雪地里走)的学习天地 | 经验分享整理平台 | 陈冬冬
 服务器本次启动于:17天前 

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

2019-04-04 21:40:04 阅读:()

本篇文章带你入个小门,实现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输出结果参考如下:

blob.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 <T> T get(String eval , Class<T> clazz){
       
T value = parser.parseExpression(eval).getValue(context , clazz);
       
return value;
    }

}

 

 


你可能感兴趣的:
      关键字:string(16)value(14)public(13)eval(12)表达式(11)
      互动()
      评论()
      比起点赞,站长更喜欢登录后的评论
      • 0
      • 0
      • 0
      • 0
      • 0