- 案例说明
- 动态生成类工具类
- 动态生成类示例
我们有一个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



