我正在开发一个简单的插件系统,我基本上想控制哪个类加载器在new
指令上加载一个类。例如,我的主程序有一个 jar,我Foo.class
在一个名为Bar.jar
.
我看到将 jar 包含在我的主程序中的三种不同可能性:
- 用我的主 jar打包
Bar.jar
以将其包含在类路径中。这对于插件系统来说显然是不可行的 Foo
使用指向 jar 的 URL ClassLoader 加载类。这对于默认的 java 程序员来说太不熟悉了,无法通过其名称手动加载类- 通过参数将自定义类加载器设置为系统类加载器
-Djava.system.class.loader
。但我真的不想强迫用户使用额外的参数来启动他的应用程序。
还有其他方法吗?也许可以为特定类注册自定义类加载器?或更改new
在运行时使用的类加载器?设置 的ContextClassLoader
不起作用Thread
。