1、动态天生java源代码
这个过程太过大略,直接略过。

2、动态编译。

我看我们自己的规则引擎也有动态编译,便是在天生BOM模型的时候。
但是是调用Process实行javac。
但这种办法坦白来说不好。
由于javac,的命令参数写法和操作系统有关,也便是windows和linux的写法有少量不同。
后来创造jdk供应一个动态编译的类。

jsp加载java中的动态加载 GraphQL

JavaCompiler javac;

javac = ToolProvider.getSystemJavaCompiler();

int compilationResult = javac.run(null,null,null, \公众-g\公众,\"大众-verbose\"大众,javaFile);

这样就可以动态进行编译。
前两个参数是输入参数、输出参数,我以为没有什么用,第三个参数是编译输出信息,默认输出到System.out.err里面。
从第四个参数开始,便是javac的参数,可以用数组,也可以直接逗号分割。

3、动态加载。

动态加载实际便是调用ClassLoader。
当然须要反射机制调用个中的一个内部分方法,使之变成外部可调用的方法。

File file = new File(\"大众/Users/yangming/Work/DevWorkSpace/ssac/gx_hx/test/\"大众); URLClassLoader classloader = (URLClassLoader) ClassLoader.getSystemClassLoader();

Method add = URLClassLoader.class.getDeclaredMethod(\公众addURL\"大众, new Class[]{URL.class});

add.setAccessible(true);

add.invoke(classloader, new Object[]{file.toURI().toURL()});

Class c = classloader.loadClass(\"大众Test\公众);

Object o = c.newInstance();

Method m = c.getDeclaredMethod(\"大众getString\"大众);

m.invoke(o, null);

这样就完成了类的动态加载。

不知道大家想要理解哪一些方面的可以留言评论,我会总结发布的哦