OSGI:类加载和继承

时间:2014-09-23 13:01:01

标签: inheritance osgi classloader

我有以下类层次结构

enter image description here

parent中声明了

child1bundle_1child2

中声明的bundle_2

哪个类加载器child2将用于加载超类?

2 个答案:

答案 0 :(得分:1)

在OSGi中,每个捆绑包有一个ClassLoader。加载类时,ClassLoader将首先查看bundle的Import-Package语句。如果该类来自导入的包,则将加载委托给提供包的包的ClassLoader。如果这些都不匹配,那么bundle将尝试从其自己的类加载该类。 (这有点简化,但对你的情况应该足够了。)

所以parent_1和class1类将由bundle_1的ClassLoader加载,而child2将由bundle_2的ClassLoader加载。

要记住的另一件事。 java中的每个类都存储在" class" .getClassLoader()中创建此类的ClassLoader。因此,这可以让您轻松检查实际发生的情况。只需实例化child1和child2并打印ClassLoaders。

与此相关的另一件事是,如果在类A的代码中使用new" Classname"(),那么这将触发加载A类的ClassLoader。(然后可以委托当然)。

答案 1 :(得分:0)

鉴于类是由类名和加载类的类加载器唯一标识的,parentchild1必须由{{1}的类加载器加载}。 bundle_1的类加载器将加载child2