Spring el表达式的入门使用及简单封装
Spring基本篇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);
}
}
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;
}
}
点赞