总体使用
//解析器
private SpelExpressionParser parser = new SpelExpressionParser();
//表达式上下文
StandardEvaluationContext context = new StandardEvaluationContext();
//添加方法 - 输出json字符串
context.registerFunction("toJSONString", JSON.class.getMethod("toJSONString", new Class[] {Object.class}));
//方法入参作为root对象
Object parameter = (null !=params && params.length>0) ? params[0] : CharConstant.EMPTY;
context.setRootObject(parameter);
//用户信息作为动态变量
context.setVariable("userInfo", new UserInfo());
//设置springBean上下文
context.setBeanResolver(new BeanFactoryResolver(SpringContextUtils.getApplicationContext()));
//执行--- 返回String
String operationContent = parser.parseExpression("此处是需要执行的spel表达式", new TemplateParserContext()).getValue(context, String.class);
表达式说明
- 表达式模板
#{}
表达式模板允许将文字文本与一个或多个评估块混合。每个评估块都由前缀和后缀字符分隔,默认是#{ }
。支持实现接口ParserContext
自定义前后缀。
使用:"#{#root},#{data}" --->执行后返回两个表达式用 ',' 链接
- bean引用
如果评估上下文已经配置了 bean 解析器,可以使用 @
符号从表达式中查找 bean
。
使用: @XXXService
- 引入外部方法
此处加入名为toJSONString的方法,旨在将对象转成String
代码:context.registerFunction("toJSONString", JSON.class.getMethod("toJSONString",new Class[]{ Object.class})); context.setVariable("testVO",testVO);
使用: "#{#toJSONString(#testVO)}"
#this
和#root
变量
#this
变量始终被定义并引用当前评估对象(针对那些非限定引用被解析)。-->setVariable
#root
变量始终被定义并引用根上下文对象。 ------>setRootObject
若setRootObject直接放一个变量,不是对象,则直接用#root取
若存放对象,则直接使用对象的属性
使用:“#{#root}”
setRootObject(new Student()) "#{studentName}"
至此,使用篇结束,欢迎大家补充和指正