OSGi环境下能否实现单例

Can singleton be implemented in OSGi environment

据我所知,osgi 中的每个包都有自己的 classloader。假设我们有三个 bundles:1,2,3。 bundle 1 中有单例 class。bundle 2 加载单例并对其进行一些更改。据我了解,如果 bundle 3 也加载单例,则它的单例版本是不同的。所以 bundle 2 中的单例 != bundle 3 中的单例。

我的说法对吗?如果他们是对的,那么它不是单例,是吗?

确实每个包都有自己的 classloader,但是 classloader 是 "shared",这取决于 Manifest import-package 声明。每个 bundle classloader 维护一个私有映射 table,告诉它哪个 classloader 负责提供来自特定包的 classes。 在您的情况下,当 bundle 2 加载单例时,它不会自行加载 Singleton,它会向 bundle 1 classloader 询问 class.