据我所知,osgi 中的每个包都有自己的类加载器。假设我们有三个包:1、2、3。 bundle 1 中有单例类。bundle 2 加载单例并对其进行一些更改。据我了解,如果 bundle 3 也加载单例,则它的单例版本是不同的。所以 bundle 2 中的单例 != bundle 3 中的单例。
我的说法对吗?如果他们是对的,那么它就不是单例,对吗?
最佳答案
的确,每个 bundle 都有自己的类加载器,但类加载器是“共享的”,具体取决于 Manifest import-package
声明。每个 bundle 类加载器维护一个私有(private)映射表,告诉它哪个类加载器负责提供来自特定包的类。
在您的情况下,当 bundle 2 加载单例时,它不会自行加载 Singleton,它会向 bundle 1 类加载器询问该类。
关于java - OSGi环境下能否实现单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37321168/