SpEL表达式初识与运用

总体使用

//解析器    
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}"

至此,使用篇结束,欢迎大家补充和指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值