【问题标题】:OSGi: Loading a super class with a different version than the child Class is statically wired toOSGi:加载具有与子类不同版本的超类被静态连接到
【发布时间】:2011-08-12 03:16:24
【问题描述】:

我有一种情况:B 类在它自己的 Bundle 中(比如 Bundle-B-1.0.0)。 A类在Bundle-A.1.0.0中),A和B的关系是:

public class B extends A {
    public B(){
      super();
    }
}

我正在尝试将 B 类加载到具有 Class A' 可见性的不同 ClassLoader C 中,这与 Class-A 相同,但在不同(更高)版本的 Bundle-A.2.0.0 中。

当我使用 ClassLoader C 并通过反射创建 B 类实例(来自同一个 Bundle-B.1.0.0)时,我如何确保它引用/使用来自 Bundle-A.2.0.0 的类 A'(调用 super() 时的更高版本的捆绑包)?

我试图满足的要求是 B 类可以/应该能够在其自己的实例化期间按需引用 A 或 A'。这可能吗?

【问题讨论】:

    标签: java osgi classloader bundle


    【解决方案1】:

    不,这是不可能的。 Bundle B 将被连接到从 A 或 A' 导入,但您不能在两者之间动态切换。

    【讨论】:

    • 同意。经过一番试验后,我尝试使用 ClassLoader C 重新加载类字节码(通过反射调用 definClass()),结果成功了。
    • 那么你已经创建了 B'(它扩展了 A')。从 VM 的角度来看,这些都是不同的类。
    • 这也是正确的。现在,这让我回到了最初的需求——如何正确地为这个问题设计解决方案。
    • Anand:这取决于您最初尝试解决的问题,并且您的问题中没有相关信息。通常,需要在多种可能性之间动态选择的情况需要使用 OSGi 服务。但是您应该放弃使用继承进行建模。
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2010-12-23
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多