您好,欢迎来到[问答大全]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 问答大全 >> 电脑网络 >> java 动态加载Class如何实现

java 动态加载Class如何实现

来源:网络整理     时间:2016/3/18 10:29:13     关键词:

关于网友提出的“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

相关图片

相关文章