【表达式】Spring SpEL表达式

从Spring 3开始引入了Spring表达式语言,它能够以一种强大而简洁的方式将值装配到Bean属性和构造器参数中,在这个过程中所使用的表达式会在运行时计算得到值。使用SpEL你可以实现超乎想象的装配效果,这是其他装配技术很难做到的。它包含了很多特性:

    使用bean的ID来引用bean;
    调用方法和访问对象的属性;
    对值进行算术、关系和逻辑运算;
    正则表达式匹配;
    集合操作;

SpEL运算符

运算符类型 运算符
算术比较 +、-、*、/、%、^
比较运算 <、>、==、<=、>=、lt、gt、rq、le、ge
逻辑运算 and、or、not、|
条件运算 ?: (ternary)、?:(Elvis)
正则表达式 matches

例:

#{2*T(java.lang.Math).PI * circle.radius}               //圆周长计算
#{T(java.lang.Math).PI * circle.radius^2}               //圆面积计算
#{disc.title + 'by' + disc.artist}                      // + 是连接符
#{counter.total == 100}  #{counter.total eq 100}        //判断是否一致,返回true和false
#{counter.total > 100 ? "Winner" : "Loser"}             //三元表达式 
#{disc.title ?: 'Rattle'}                   //Elvis,如果是null的话结果则为Rattle
#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._-]+\\.com'}  //正则表达式

SpEL调用静态方法

T(com.alibaba.fastjson.JSONPath).read(#projectItemJsonStr, '$.projectId')

通过SpEL表达式解析JSON

@CacheEvict(cacheNames = "redis:project:cache", key = "T(com.alibaba.fastjson.JSONPath).read(#projectItemJsonStr, '$.projectId')")
public Result<?> add(String projectItemJsonStr) {

通过SpEL表达式解析JSON

        Map<String, String> data = new HashMap<>();
        data.put("JsonData", "{\"someData\": \"100\"}");
        Expression expression = new SpelExpressionParser().parseExpression("T(com.alibaba.fastjson.JSONPath).read(get('JsonData'), '$.someData')");
        StandardEvaluationContext context = new StandardEvaluationContext(data);
        context.addPropertyAccessor(new JsonPropertyAccessor());
        Object value = expression.getValue(context, Object.class);
        System.out.println(value);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是Superman丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值