在我的 web 服务应用程序中,我必须集成一个第三方模块来验证业务规则,这些模块附带了相当旧的库。
旧图书馆与我的新图书馆发生冲突。
有没有办法将第三方模块隔离在正在运行的 web 服务中的单独线程/类加载器中?
您正在寻找的是所谓的OSGi。
当然可以,但是您必须像这样通过反射来使用它:
ClassLoader classLoader = new URLClassLoader (
new URL [] {/* Classpath or isolated module here */},
ClassLoader.getSystemClassLoader ().getParent ());
Class <?> isolatedModuleClass = classLoader.loadClass (
/* Full name of class from isolated module */);
Object isolatedObject =
isolatedModuleClass.
getConstructor (/* Constructor argument types */).
newInstance (/* Constructor arguments */);
Object result =
isolatedModuleClass.
getMethod (/* Method name */, /* Method parameter types */).
invoke (isolatedObject, /* Method arguments */);