Java URLClassLoader:选择要导入的类

Java URLClassLoader:选择要导入的类,java,jar,urlclassloader,Java,Jar,Urlclassloader,目前,我正在使用这一行加载第三方JAR,并将其包/类添加到我的程序中 URL [] urls = new URL [] { "http://..." }; new URLClassLoader(urls); 这种方法的问题是整个JAR都被加载了,这意味着所有的包和类都被导入了。 我如何告诉URLClassLoaded只加载几个选定的类 一个例子是这样的JAR层次结构 A包 第一类 第二类 B包 第一类 第二类 第三类 第四类 我想做一些类似于“仅导入A.*和B.class2”的事情

目前,我正在使用这一行加载第三方JAR,并将其包/类添加到我的程序中

URL [] urls = new URL [] { "http://..." };
new URLClassLoader(urls);
这种方法的问题是整个JAR都被加载了,这意味着所有的包和类都被导入了。 我如何告诉URLClassLoaded只加载几个选定的类

一个例子是这样的JAR层次结构

  • A包
    • 第一类
    • 第二类
  • B包
    • 第一类
    • 第二类
    • 第三类
    • 第四类
我想做一些类似于“仅导入A.*和B.class2”的事情,提供ClassLoader的自定义实现

重写类加载器的
findClass()
方法,并应用业务逻辑来选择要加载的类

class CustomClassLoader extends ClassLoader {

         public Class findClass(String name) {
             if(shouldBeLoaded)
                return defineClass(name, b, 0, b.length);
         }
    }
将此设置为加载的默认类加载器(可选)


实现您自己的
类加载器
。您必须实现自定义类加载器,正如我在回答中所描述的,并将其设置为加载类的默认类加载器。我真的需要将其设置为默认类加载器吗?如果我总是调用new CustomClassLoader()而不是new URLClassLoader(),这不应该是相同的吗?不,您也可以调用CustomClassLoader()。您不需要设置默认值。
java -Djava.system.class.loader
    =com.test.CustomClassLoader