2、动态编译。
我看我们自己的规则引擎也有动态编译,便是在天生BOM模型的时候。但是是调用Process实行javac。但这种办法坦白来说不好。由于javac,的命令参数写法和操作系统有关,也便是windows和linux的写法有少量不同。后来创造jdk供应一个动态编译的类。
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);
这样就完成了类的动态加载。
不知道大家想要理解哪一些方面的可以留言评论,我会总结发布的哦