`
shixiaomu
  • 浏览: 382832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

URLClassLoader

    博客分类:
  • java
阅读更多
Thread.currentThread().getContextClassLoader();


URLClassLoaderUtil jar文件载入工具类import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

publicclass URLClassLoaderUtil {
    URLClassLoader classLoader = null;// URLClassLoader类载入器
    private String jarFileName;
    privatebooleanisFile = true;
    List<String> jars = new ArrayList<String>(0);

    public URLClassLoaderUtil(String jarFileName) {
       this.setJarFileName(jarFileName);
       this.inti();
    }

    public URLClassLoaderUtil(String jarFileName, boolean isFile) {
       this.setJarFileName(jarFileName);
       this.setFile(isFile);
       this.inti();
    }

    /**
     *初始化,读取文件信息,并将jar文件路径加入到classpath
     */
    privatevoid inti() {
       // 添加jar文件路径到classpath
       if (this.isFile) {
           File f = new File(jarFileName);
           addPath(f.toURI().toString());
           jars.add(f.getAbsolutePath());
       } else {
           ReadJarFile df = new ReadJarFile(jarFileName, new String[] { "jar",
                  "zip" });
           this.jars = df.getFiles();
           List<String> jarURLs = df.getFilesURL();
           Object[] o = jarURLs.toArray();
           addPath(o);
       }
    }

    /**
     *回叫方法,class操作
     *
     *@paramcallBack
     */
    publicvoid callBack(ClassCallBack callBack) {
       for (String s : this.jars) {
           loadClass(s, callBack);
       }
    }

    /**
     *添加单个jar路径到classpath
     *
     *@paramjarURL
     */
    privatevoid addPath(String jarURL) {
       try {
           classLoader = new URLClassLoader(new URL[] { new URL(jarURL) });
       } catch (MalformedURLException e) {
           e.printStackTrace();
       }
    }

    /**
     *添加jar路径到classpath
     *
     *@paramjarURLs
     */
    privatevoid addPath(Object[] jarURLs) {
       URL[] urls = new URL[jarURLs.length];
       for (int i = 0; i < jarURLs.length; i++) {
           try {
              urls[i] = new URL(jarURLs[i].toString());
           } catch (MalformedURLException e) {
              e.printStackTrace();
           }
       }
       classLoader = new URLClassLoader(urls);
    }

    /**
     *动态载入class
     *
     *@paramjarFileName
     *@paramcallBack
     */
    privatevoid loadClass(String jarFileName, ClassCallBack callBack) {
       JarFile jarFile = null;
       try {
           jarFile = new JarFile(jarFileName);
       } catch (IOException e) {
           e.printStackTrace();
       }
       Enumeration<JarEntry> en = jarFile.entries();
       while (en.hasMoreElements()) {
           JarEntry je = en.nextElement();
           String name = je.getName();
           String s5 = name.replace('/', '.');
           if (s5.lastIndexOf(".class") > 0) {
              String className = je.getName().substring(0,
                     je.getName().length() - ".class".length()).replace('/',
                     '.');
              Class c = null;
              try {
                  c = this.classLoader.loadClass(className);
                  System.out.println(className);
              } catch (ClassNotFoundException e) {
                  System.out.println("NO CLASS: " + className);
                  // continue;
              } catch (NoClassDefFoundError e) {
                  System.out.println("NO CLASS: " + className);
                  // continue;
              }
              callBack.operate(c);
           }
       }
    }

    public String getJarFileName() {
       returnjarFileName;
    }

    publicvoid setJarFileName(String jarFileName) {
       this.jarFileName = jarFileName;
    }

    publicboolean isFile() {
       returnisFile;
    }

    public URLClassLoader getClassLoader() {
       returnclassLoader;
    }

    publicvoid setClassLoader(URLClassLoader classLoader) {
       this.classLoader = classLoader;
    }

    publicvoid setFile(boolean isFile) {
       this.isFile = isFile;
    }
}
分享到:
评论

相关推荐

    Java URLClassLoader动态加载jar包1

    Java URLClassLoader 是Java标准库中的一个类加载器,它允许我们动态地从指定的URL位置加载类和资源。这个功能在开发插件系统、热部署或者处理多种版本库的场景中非常有用。从JDK 1.2开始,`java.net.URLClassLoader...

    使用URLClassLoader加载本地文件夹c盘下的test.jar文件

    URLClassLoader是Java提供的一种类加载器,它允许我们通过URL来加载类和资源,从而实现这一目标。本篇文章将深入讲解如何使用URLClassLoader加载C盘下的test.jar文件。 首先,了解类加载器的基本概念。在Java中,类...

    URLClassLoader中指定目录和jar的问题

    在Java编程语言中,`URLClassLoader`是Java标准类加载器的一种实现,它负责从指定的URL(统一资源定位符)加载类和资源。本文将深入探讨`URLClassLoader`的工作原理,以及如何处理指定目录和JAR文件中的类加载问题。...

    java反序列化漏洞URLClassLoader利用1

    这里提到的“Java反序列化漏洞URLClassLoader利用1”是利用了Java中的`java.net.URLClassLoader`来远程加载并执行恶意代码的一个示例。 `URLClassLoader`是Java中的一个类加载器,它可以从指定的URL列表中加载类。...

    URLClassLoader初体验

    在Java世界中,`URLClassLoader`是一个非常关键的类,它是`ClassLoader`的子类,主要用于从指定的URL(统一资源定位符)加载类和资源。这篇博客文章“URLClassLoader初体验”可能深入探讨了如何使用`URLClassLoader`...

    Springboot + Hutool-db 使用 URLClassLoader 动态加载外部数据库和数据池 jar包实例

    在这个场景中,我们看到一个基于Springboot的应用程序结合了Hutool-db库,利用URLClassLoader来实现动态加载外部数据库驱动和数据池的jar包。这使得开发者可以在不重启应用的情况下更新或添加新的数据库连接和资源池...

    ClassLoaderTest:测试如何正确关闭类加载器,以便可以关闭基础jar文件上的文件句柄

    当我们使用自定义的URLClassLoader时,尤其需要注意类加载器的生命周期管理,因为不正确的关闭可能导致打开的文件句柄无法正确释放,从而消耗系统资源。 首先,我们来了解下类加载器的工作原理。Java中的类加载器...

    java动态加载插件化编程详解

    3. URLClassLoader:URLClassLoader是一个Java类加载器,它可以根据URL加载类或 jar 文件。在插件化编程中,URLClassLoader可以用于加载插件。 4. 插件管理:插件管理是指对插件的生命周期管理,包括插件的加载、...

    aop面向切面需要的jar包

    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang....

    lassLoader的关系以及如何防止ClassLoader内存泄漏

    在Java世界中,类加载器(ClassLoader)是关键的组件之一,它负责将类的字节码文件(.class)从文件系统或网络中加载到Java虚拟机(JVM)中,使得程序能够运行。本篇文章将深入探讨ClassLoader的关系网络以及如何...

    URLClass工程之间反射机制的实现

    `URLClassLoader`是Java中的一个关键类,它是`ClassLoader`的一个子类,主要用于加载来自特定URL位置的类。在"URLClass工程之间反射机制的实现"这个主题中,我们将深入探讨如何利用这两个概念在不同的工程之间实现...

    swing-worker-1.1.jar

    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(NativeMethod) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at sun.misc....

    java 反射运行时加载外部jar到Tomcat StandardClassLoader1

    URLClassLoader c = (URLClassLoader) getClass().getClassLoader().getParent().getParent(); ``` 2. 创建一个 `URL` 对象,表示要加载的 JAR 文件的 URL。 ```java URL jar = new URL(...

    AXMLPrinter2、baksmali、smali、dex2jar

    at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController....

    android反编译dex2jar

    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang....

    解决classloader的jar包

    包括commons-logging commons-beanutils commons-lang ezmorph json-lib-2.4-jdk15 commons-collections-3.2.1的jar包,可以解决 org/apache/commons/lang/exception/NestableRuntimeException的问题

    RMI不依赖其他http服务实现代码动态下载

    这个改进的核心在于Java 6中的`java.net.URLClassLoader`和`sun.rmi.server.LoaderHandler`类。`URLClassLoader`能够从URL加载类,而`LoaderHandler`则负责处理RMI中的类加载逻辑。通过这两者的结合,RMI可以在需要...

    详解Java动态加载数据库驱动

    `getConnection` 方法接收一个数据源名称,然后根据名称获取相应的数据源信息,如果还没有加载对应驱动,则使用 `URLClassLoader` 加载驱动类,实例化 `Driver` 对象,并将其注册到 `DriverManager` 中。最后,使用...

    反射获取jar文件中的类

    URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url1}, Thread.currentThread().getContextClassLoader()); String ppName = sName.replace("/", ".").replace(".class", ""); Class myClass = ...

    Spring bean 动态注册,jar包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

Global site tag (gtag.js) - Google Analytics