java - OSGi环境下能否实现单例

标签 java osgi

据我所知,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/

相关文章:

java - MP4Parser 改变视频方向

java - Presto集群+如何根据内存资源调优jvm.config

java - 将 OSGi 与 Java SPI 相结合

mysql - 事务回滚在 karaf 中不起作用

database - Apache Felix 无法访问 Postgres JDBC

java - HTTP 状态 403 - 禁止访问 - 使用 glassfish-v3 设置 jdbc 领域

java - 从命令行执行包的java程序时出现错误

java - Java中的高级多态性

java - OSGi 包未启动 : missing requirement osgi. wiring.package; > &(osgi.wiring.package=org.apache.felix.dm)

java - 使用嵌入式 OSGi 框架的服务