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