繁体   English   中英

多次实例化默认类加载器

[英]Instantiate default class loader more than once

在一个很大的java spring项目的一小部分中,我有两个版本的依赖Java库,但是我确实必须结合使用一段时间:

-新版本与旧版本不向后兼容

-两个版本都使用相同的uris

因此,我最终尝试以某种方式分别实例化这两个库的版本,因为默认的类加载器一直保持着第一个实例,而事情变得发疯了。 我花了几个小时进行搜索,很多人推荐OSGi,但我不想仅仅为了一点儿就集成所有框架。 另外,我通过Maven尝试了jarjar,但是我似乎没有为目标依赖jar工作(我认为它们还是被混淆了)。 因此,我试图简单地设置一个单独的ClassLoader即可解决问题。 你们当中有人知道任何简单的方法吗?

您可以将框架的用法封装为少量功能,这些功能可以由接口描述吗?

如果是这样,并且您处于应用程序服务器环境中,则可以执行以下操作:

定义您的接口,并使用两种工厂方法将其放入应用程序服务器的lib-Folder中。 您的应用程序转到版本1的WebArchive1框架转到WebArchive2并从lib-Folder填充factory-method1版本2版本中的框架转到WebArchive3并从lib-Folder填充factory-method2

--> lib
public interface MyInterface {
   // do Stuff
}

public class MyFactory {
  private static MyInterface v1;
  private static MyInterface v2;

  public MyInterface getV1() {...}
  public MyInterface getV1() {...}
}

--> WebArchive2
MyFactory.setV1(new Lib());

--> WebArchive3
MyFactory.setV2(new Lib());

没关系,解决问题的简便方法。 我联系了图书馆的作者,他们为我重构了旧版本的软件包。 因此,不再需要类加载器技巧:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM