是否有可能在不同的类加载器中重新创建清单?

时间:2013-06-24 13:16:39

标签: scala reflection osgi scala-2.10

更新 - 原始问题不含糊,导致抽象讨论。

澄清正在更新中。

我有immutable.HashMap[Manifest[_], _]由类加载器A中的第三方库生成。

  • Manifest[MyClassX]传递给类加载器边界时,包含共享类的键hashCode将保留其HashMap
  • 包含来自不同类加载器的类的键Manifest[MyClassY]将变得无法使用。

Manifest[MyClassY]内部类加载器 A Manifest[MyClassY]内部类加载器 B 具有不同的hashCode值。

我想知道Scala反射库是否能够从类加载器 A B 中重新创建Manifest[_]

FYI。之后,我将比较原始清单和新清单。

If hashCode is the same then
  we have `Manifest[MyClass]` with `MyClass` from shared origin.
else
  we have Manifest[MyClass] with MyClass from different origins.

我需要通过这个约束来检测和分离HashMap的键。


原始

我有OSGi环境,我有清单 m ,哈希码为 123 ,包含 A 。 我想检查捆绑 B 中可用类的清单“是否相同”。

如果我将清单传递给捆绑 B ,那么:

  • 如果我在使用反射重新创建清单 m'之后,捆绑包具有清单类的公共类加载器,则它必须具有相同的哈希码 123
  • 如果bundle有不同的类加载器,那么我将使用哈希码 987 显示 m',即使清单类名也是相同的。如果类由不同的类加载器加载,则相同类的哈希代码不同。

有没有办法通过反射重新创建清单?我不想处理所有可能的清单字段,要求每个字段Class.forName(...),然后将hashCode与来源进行比较。

是否还有其他可能达到同一目标?

我必须通过外部库来体现。

0 个答案:

没有答案