【问题标题】:how to load multiple version of same class using dynamic class loading in java如何在java中使用动态类加载来加载同一类的多个版本
【发布时间】:2015-01-29 13:01:02
【问题描述】:

在我的 java 程序中,我有一个带有静态块的类。我知道静态块只被初始化一次,并且只被 JVM 加载一次。但是,如果我希望该静态块被执行(或加载)一次以上怎么办。我尝试使用 class.forName() 在另一个类中动态加载该类,并尝试使用 classLoader。但是静态块只执行一次。所以建议我做最简单的方法。

我了解到通过使用 classLoader 我们可以加载同一个类的多个版本。但如何?我可以在我的程序中实现这个概念吗?

【问题讨论】:

  • 您是否尝试过编写自己的类加载器? class.forName() 检查类是否已经加载.. 所以它不会帮助你
  • 如果您将编写自己的 ClassLoader,那么可以。否则系统类加载器正在检查类是否已加载,如果是,则不加载类,仅返回您的类类型的类对象。
  • 你的实际用例是什么?
  • 建立你的类加载器实现。
  • 感谢大家的宝贵建议。是的,你们是对的。这只能通过编写自己的类加载器来完成。

标签: java


【解决方案1】:

下面是你需要的类加载器的粗略草图

class HelloWorldClassLoader extends ClassLoader {

  @Override
  public Class loadClass(String name) throws ClassNotFoundException {
    if (!"MyClass".equals(name)) return super.loadClass(name);
    byte[]  bb=ByteStreams.toByteArray(
                 getResourceAsStream(name.replace('.','/')+".class"));
    return defineClass(name,bb,0,bb.length);
  }
}

要使用它,请执行

new HelloWorldClassLoader().loadClass("MyClass");

【讨论】:

    【解决方案2】:

    stackoverflow 中提供了对类似问题的回复,以下是一些链接: Java - how to load different versions of the same class?

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2011-08-13
      • 1970-01-01
      • 2012-07-30
      • 2011-07-31
      • 2017-11-01
      • 2011-04-01
      • 1970-01-01
      • 2011-11-05
      相关资源
      最近更新 更多