据我所知,osgi中的每个包都有自己的类加载器。我们假设我们有三个捆绑:1,2,3。 bundle 1中有singleton类.Bundle 2加载singleton并对其进行一些更改。据我了解,如果bundle 3加载单例,它的单例版本也是不同的。所以捆绑2中的单身人士!=捆绑3中的单身人士。
我的陈述是否正确?如果他们是对的,那么它不是单身,是吗?
答案 0 :(得分:4)
确实,每个bundle都有自己的类加载器,但类加载器是“共享的”,具体取决于Manifest import-package
声明。每个bundle类加载器都维护一个私有映射表,告诉它哪个类加载器负责从特定包中提供类。
在你的情况下,当bundle 2加载单例时,它不会自己加载Singleton,它会向bundle 1类加载器询问该类。