【发布时间】:2021-11-06 05:57:39
【问题描述】:
我正在创建一个这样的 osgi 组件:
@Component (configurationPolicy = ConfigurationPolicy.OPTIONAL, immediate = true)
public class MyServiceAccessor
{
@Reference (bind = "bindCluster", unbind = "unbindCluster", policy = ReferencePolicy.STATIC, cardinality = ReferenceCardinality.MANDATORY)
private static Cluster cluster;
我在日志中收到以下消息:
395 !ENTRY com.test.eventrecovery 4 0 2021-09-08 10:32:32.559
396 !MESSAGE [com.test.eventrecovery.MyServiceAccessor(265)] Field cluster in component class com.test.eventrecovery.MyServiceAccessor must not be static
当我们为@Component 和@Reference 使用felix 注解时,我们没有遇到这个问题。 当我们转向 OSGI 注释时,我看到了这一点。 这种行为有什么具体原因吗?请指教。 此外,我无法访问 OSGI 官方文档,这让我更加烦恼。 :( http://docs.osgi.org/specification/osgi.cmpn/7.0.0/service.component.html - 此链接打不开。
【问题讨论】:
-
我遵从@bjhargrave 的正确答案。只是想补充一点,这个问题表明了对 OSGi 组件的一个非常根本的误解,更普遍地说,是对 OSGi 的价值的误解。 OSGi 是基于 instance 的,永远不会是静态的。因此,您可以在令人作呕的 OSGi 框架中运行 OSGi 框架。允许静力学会扼杀这个非常基本的特性。删除所有非常量的静态数据往往会严重改进代码库。静态可能看起来很方便,但它们会腐蚀您的代码。
标签: java osgi apache-karaf