栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 运行时动态生成类(动态编译)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 运行时动态生成类(动态编译)

文章目录
  • 案例说明
  • 动态生成类工具类
  • 动态生成类示例

案例说明

我们有一个Person类:

package test;

import lombok.Data;

@Data
public abstract class Person {

    private String name;

    public abstract void sayHello();
}

Person类有一个抽象方法 sayHello,但是具体有哪些Person并不知道,需要配置在数据库中,然后动态进行生成Person的子类。

动态生成类工具类

       org.codehaus.groovy
       groovy-all
       2.4.13

工具类代码如下:

package test;

import groovy.lang.GroovyClassLoader;

public class CompilerUtil {

    public static Class generateClass(String javaFilename, String packageName, String javaCode) throws Exception {

        GroovyClassLoader groovyClassLoader = new GroovyClassLoader();

        String prefix = String.format("package %s;", packageName);

        return groovyClassLoader.parseClass(prefix + "n" + javaCode);
    }
}


动态生成类示例
package test;

import groovy.lang.GroovyClassLoader;


public class CompilerUtil {

    public static Class generateClass(String javaFilename, String packageName, String javaCode) throws Exception {

        GroovyClassLoader groovyClassLoader = new GroovyClassLoader();

        String prefix = String.format("package %s;", packageName);

        return groovyClassLoader.parseClass(prefix + "n" + javaCode);
    }

    public static void main(String[] args) throws Exception {
        String teacherCode = "public class Teacher extends Person {n" +
                "n" +
                "    @Overriden" +
                "    public void sayHello() {n" +
                "        System.out.println("My name is " + getName() + ", I am a teacher");n" +
                "    }n" +
                "}n";

        Class teacherClass = generateClass("Teacher", "test", teacherCode);
        Person person = (Person) teacherClass.newInstance();
        person.setName("Tom");
        person.sayHello();
    }
}

输出:

My name is Tom, I am a teacher
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531103.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号