OSGi中的Declarative和Bluprint Services有什么区别?因为两者都旨在实现osgi中的依赖注入。 蓝图服务是否可以替代声明性服务? 或bluprint服务是否填补了声明性服务的限制(如果有的话)?
答案 0 :(得分:9)
我担心这个问题没有一个微不足道的答案。我建议阅读两者的规格,看看差异的程度。声明性服务是服务纲要的第112节,蓝图容器是同一文件的第121节。您可以在此处获取核心和纲要文档: http://www.osgi.org/Download/Release4V42
对我来说,最重要的区别是(在DS术语中)蓝图服务可以在没有依赖于存在的服务的情况下变为活动状态。容器创建代理服务,阻止实际实现可用。我相信这类似于Spring的方法,那些习惯使用Spring的IOC / DI方法的人会立即获得蓝图,但我无法评论从未使用过Spring或Blueprint的个人经验。
由于我们正在处理OSGi服务,因此您可以根据需要混合使用DS和蓝图。到目前为止,我还没有发现需要做任何比DS更复杂的事情,所以我不确定Blueprint Container规范遇到什么用例,尽管从规范看起来它看起来好像Blueprint提供了很多功能为了简化组件开发。
我认为它的添加主要是因为J2EE开发人员会觉得它很熟悉,但这只是我的看法。 :)
答案 1 :(得分:1)
我意识到这是一个老话题,但我认为问题仍然很重要。
我同意其他人说BS更好地隐藏OSGi的动态性而不是DS。 此外,看起来DS用于绑定捆绑包中的,而BS可用于构建“供内部消费”的对象图。