OSGi声明服务(DS)规范定义了注释,这些注释可以由工具(如Bnd)处理到运行时使用的组件描述xml中。 R6规范中的112.8.1说:
The Component Annotations are not inherited, they can only be used on a given class, annotations on its super class hierarchy or interfaces are not taken into account.
为什么指定它们不允许继承?
答案 0 :(得分:12)
Apache Felix项目提供的DS注释曾经支持DS可扩展性。基于此实现,我们尝试将其标准化为特定官方OSGi DS注释的工作的一部分。
问题是,我们在跨边界的两个实现类之间遇到了令人讨厌的耦合问题,我们无法使用Import-Package
或Require-Capability
标头正确表达这种依赖关系。
有些问题浮现在脑海中:
bind
和unbind
方法设为私有。 DS可以在基类上调用私有bind
或unbind
方法吗? (从技术上讲,这可以做得很好,但概念上可以吗?)bind
/ unbind
方法,它们仍然命名旧的方法名称。bind
/ unbind
方法。因此我们强制实现细节方法成为API的一部分。恕我直言不太好。我们当时争辩说,在单个捆绑包中进行这样的继承是可以的,但得出的结论是,这种限制,围绕它的解释等等都不值得付出努力。因此,我们再次从规范路线图中删除了该功能。