【低代码开发】Java中使用Groovy主要有三种常见的方法

在 Java 中使用 Groovy 主要有三种常用方法,每种方法适用于不同场景:


1. 使用 GroovyShell(执行脚本片段)

适用场景:快速执行简单的 Groovy 脚本字符串或表达式。
特点:轻量级,适合动态计算或规则引擎。

java

复制

下载

import groovy.lang.Binding;
import groovy.lang.GroovyShell;

public class GroovyShellDemo {
    public static void main(String[] args) {
        // 1. 创建 Binding 传递变量
        Binding binding = new Binding();
        binding.setVariable("name", "Java");

        // 2. 初始化 GroovyShell
        GroovyShell shell = new GroovyShell(binding);

        // 3. 执行 Groovy 脚本
        Object result = shell.evaluate("""
            "Hello from ${name}! " + (1 + 2)
        """);

        System.out.println(result); // 输出: Hello from Java! 3
    }
}

2. 使用 GroovyClassLoader(动态加载类)

适用场景:动态编译并加载 Groovy 类,调用其方法(类似 Java 反射)。
特点:适合将 Groovy 作为插件或扩展逻辑。

java

复制

下载

import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;

public class GroovyClassLoaderDemo {
    public static void main(String[] args) throws Exception {
        // 1. 创建 Groovy 类源码字符串
        String script = """
            class DynamicGroovy {
                String greet(String name) {
                    "Hello, ${name}!"
                }
            }
        """;

        // 2. 使用 GroovyClassLoader 动态加载类
        GroovyClassLoader loader = new GroovyClassLoader();
        Class<?> groovyClass = loader.parseClass(script);

        // 3. 实例化并调用方法
        GroovyObject groovyObject = (GroovyObject) groovyClass.getDeclaredConstructor().newInstance();
        Object result = groovyObject.invokeMethod("greet", new Object[]{"Groovy"});

        System.out.println(result); // 输出: Hello, Groovy!
    }
}

3. 使用 JSR-223 ScriptEngine(标准 API)

适用场景:需要兼容多种脚本语言(如 JavaScript、Python)的场景。
特点:跨语言标准,依赖 javax.script 包。

java

复制

下载

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class JSR223Demo {
    public static void main(String[] args) throws Exception {
        // 1. 获取 Groovy 脚本引擎
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("groovy");

        // 2. 向引擎传递变量
        engine.put("x", 10);
        engine.put("y", 5);

        // 3. 执行脚本
        Object result = engine.eval("""
            z = x * y
            "Result: $z"
        """);

        System.out.println(result); // 输出: Result: 50
    }
}

依赖配置(Maven)

确保添加 Groovy 依赖(以最新版本为例):

xml

复制

下载

运行

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>3.0.20</version> <!-- 检查最新版本 -->
</dependency>
<!-- 若用 JSR-223,额外添加 -->
<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-jsr223</artifactId>
    <version>3.0.20</version>
</dependency>

方法对比

方法优点缺点
GroovyShell简单直接,适合小脚本不适合复杂类/方法调用
GroovyClassLoader可编译完整类,类似 Java 反射需处理类加载和对象生命周期
JSR-223 ScriptEngine标准化,支持多语言性能略低,依赖额外包

根据需求选择合适的方式,动态逻辑推荐 GroovyClassLoader,简单计算用 GroovyShell,多语言集成用 JSR-223。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

meisongqing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值