/**
* 生成.java文件和.class文件
* @param src 一段字符串代码
* @throws Exception
*/
public static void generateClass(String src) throws Exception{
String fileDir = System.getProperty("user.dir");
String fileName = fileDir + "\\src\\com\\waniz\\proxy\\**.java";
File file = new File(fileName);
Writer writer = new FileWriter(file);
writer.write(src);
writer.close();
//获取Java编译器
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
//标准文件管理
StandardJavaFileManager sjfm = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> iterable = sjfm.getJavaFileObjects(fileName);
CompilationTask ct = compiler.getTask(null, sjfm, null, null, null, iterable);
ct.call();
sjfm.close();
}
/**
* .class文件载入内存,反射构建对象
* @return
* @throws Exception
*/
public static Object loadAndGetInstance() throws Exception{
URL[] urls = new URL[]{new URL("file:\\" + System.getProperty("user.dir") + "\\src")};
URLClassLoader classLoader = new URLClassLoader(urls);
Class<?> c = classLoader.loadClass("com.waniz.proxy.**");
Constructor<?> contructor = c.getConstructor(Having.class);
HavingDinnner hd = new HavingDinnner();
Object obj = contructor.newInstance(hd);
return obj;
}
.java-->.class-->run
最新推荐文章于 2021-03-23 15:32:25 发布