GroovyClassLoader的简单使用

前言

GroovyClassLoader 也是 Java 的一个类加载器实现,它可以将一段源码解析为 Class。xxl-job 中的 GlueFactory 就使用了此类加载器来支持 GLUE 运行模式(任务以源码方式维护在调度中心,支持通过Web IDE在线更新,实时编译和生效,因此不需要指定JobHandler)。

使用

添加maven依赖

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>3.0.10</version>
</dependency>

要执行的源码 resources/User.txt

public class User {
	public void hi() {
		System.out.println("Hello User.hi");
	}
}

测试代码

import groovy.lang.GroovyClassLoader;
import org.apache.commons.io.IOUtils;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Objects;

public class TestGroovy {
    public static void main(String[] args) throws Exception {
        InputStream inputStream = TestGroovy.class.getClassLoader().getResourceAsStream("User.txt");
        if (Objects.nonNull(inputStream)) {
            String codeScoure = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
            GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
            Class aClass = groovyClassLoader.parseClass(codeScoure);
            System.out.println(aClass.getClassLoader());
            Object instance = aClass.getConstructor().newInstance();
            System.out.println(instance);
            aClass.getMethod("hi").invoke(instance);
        }else {
            System.out.println("parse error");
        }
    }
}

可以正常执行 User 类的 hi 方法。

参考

xxl-job 官方文档

posted @ 2023-10-03 12:24  strongmore  阅读(947)  评论(0编辑  收藏  举报