Spring SpEL

本文介绍了Spring的表达式语言SpEL,它提供了一种在运行时查询和操作对象图的强大方式。SpEL支持字符串拼接、对象属性访问、字节码编译等功能,可以用于动态解析表达式。在Spring框架中,SpEL可以用于XML和注解配置,方便地进行条件判断、方法调用等操作,提高了代码的灵活性。
摘要由CSDN通过智能技术生成

Spring SpEL

一、JVM动态语言

作用:表达式语句的动态解析。

项目中的实践:在项目开发中,遇到一种场景,需要根据公式计算数据,而涉及到很多公式,并且公式可能会有变动。因此,在开发中我就使用到了动态解析这种方案——将计算公式存到表中。能够非常灵活地计算出结果。

Java6.0 中内置集成了Mozila Rhino的JavaScript解析引擎,因此可以很方便地在Java中调用JavaScript函数。

动态求和函数:

    public static void main(String[] args) throws ScriptException, NoSuchMethodException {
   
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");
        String scriptText = "function sum(a,b){ return a+b;}";
        engine.eval(scriptText);
        Invocable invocable = (Invocable) engine;
        Object result = invocable.invokeFunction("sum", 100, 99);
        System.out.println(result instanceof Double);
        System.out.println(result);
    }

二、SpEL表达式

对于仅仅需要一些简单的表达式需求的场景,使用脚本语言显得有些“笨重”,这就是介绍SpEL表达式的原因。

  • SpEL具有显式方法调用和基本字符串模板函数等特性;

  • SpEL不直接依赖于Spring框架,可以独立使用;

    可以将SpEL作为独立的动态语言使用

使用前需要引入spring-expression:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>${spring.version}</version>
</dependency>
public static void main(String[] args) {
   
    ExpressionParser parser = new SpelExpressionParser();
    Expression expression = parser.parseExpression("'hello' + ' world'");
    String message= (String) expression.getValue();
    System.out.println(message);
}

三、SpEL的核心接口

3.1 ExpressionParser

(1) 字符串的拼接
private static void testStrConcat(){
   
    ExpressionParser parser = new SpelExpressionParser();
    Expression expression = parser.parseExpression("'HelloWorld'.concat('!')");
    String value = (String)expression.getValue();
    System.out.println(value);
    System.out.println(expression.getValue(String.class));
}

3.2 Evaluat

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值