关于网友提出的“java 动态加载Class如何实现”问题疑问,本网通过在网上对“java 动态加载Class如何实现”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:java 动态加载Class如何实现
问题解答1:动态加载class文件
[java] view plaincopy// 设置class文件所在根路径 // 例如/usr/java/classes下有一个test.App类,则/usr/java/classes即这个类的根路径,而.class文件的实际位置是/usr/java/classes/test/App.class File clazzPath = new File(class文件所在根路径); // 记录加载.class文件的数量 int clazzCount = 0; if (clazzPath.exists() && clazzPath.isDirectory()) { // 获取路径长度 int clazzPathLen = clazzPath.getAbsolutePath().length() + 1; Stack stack = new Stack<>(); stack.push(clazzPath); // 遍历类路径 while (stack.isEmpty() == false) { File path = stack.pop(); File[] classFiles = path.listFiles(new FileFilter() { public boolean accept(File pathname) { return pathname.isDirectory() || pathname.getName().endsWith(".class"); } }); for (File subFile : classFiles) { if (subFile.isDirectory()) { stack.push(subFile); } else { if (clazzCount++ == 0) { Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); boolean accessible = method.isAccessible(); try { if (accessible == false) { method.setAccessible(true); } // 设置类加载器 URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); // 将当前类路径加入到类加载器中 method.invoke(classLoader, clazzPath.toURI().toURL()); } finally { method.setAccessible(accessible); } } // 文件名称 String className = subFile.getAbsolutePath(); className = className.substring(clazzPathLen, className.length() - 6); className = className.replace(File.separatorChar, '.'); // 加载Class类 Class.forName(className); LOG.debug("读取应用程序类文件[class={}]", className); } } } }
以上介绍了“java 动态加载Class如何实现”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/wd/459206.html