【发布时间】:2010-12-31 01:33:15
【问题描述】:
OSGi 中的声明式服务和蓝图服务有什么区别?因为两者都是为了在 osgi 中实现依赖注入。 蓝图服务是声明式服务的替代品吗? 还是蓝图服务填补了声明式服务的限制(如果有)?
【问题讨论】:
标签: java dependency-injection osgi
OSGi 中的声明式服务和蓝图服务有什么区别?因为两者都是为了在 osgi 中实现依赖注入。 蓝图服务是声明式服务的替代品吗? 还是蓝图服务填补了声明式服务的限制(如果有)?
【问题讨论】:
标签: java dependency-injection osgi
恐怕这个问题没有简单的答案。我建议阅读两者的规范以了解差异的程度。声明式服务是服务纲要的第 112 节,蓝图容器是同一文档的第 121 节。您可以在此处获取核心和概要文件: http://www.osgi.org/Download/Release4V42
但对我来说,最显着的区别是(在 DS 术语中)蓝图服务可以在没有它所依赖的服务存在的情况下激活。容器创建代理服务,这些服务会阻塞直到实际实现可用。我相信这类似于 Spring 的方法,习惯使用 Spring 的 IOC/DI 方法的人会立即获得 Blueprint,尽管我无法从从未使用过 Spring 或 Blueprint 的个人经验发表评论。
由于我们处理的是 OSGi 服务,因此可以按照您认为合适的方式混合和匹配 DS 和蓝图。到目前为止,我还没有发现需要做任何比 DS 更复杂的事情,所以我不确定 Blueprint Container 规范满足什么用例,尽管从规范看来,Blueprint 提供了相当多的功能为了使组件开发变得简单。
我相信添加它主要是因为 J2EE 开发人员会觉得它很熟悉,但这只是我的看法。 :)
【讨论】:
我意识到这是一个老话题,但我认为这个问题仍然很重要。
我同意其他人的观点,即 BS 比 DS 更好地隐藏了 OSGi 的动态特性。 此外,DS 似乎是用于在 包之间进行绑定,而 BS 可用于构建“供内部使用”的对象图。
【讨论】: