我最近偶然发现,OSGi中的声明式服务可以将组件的配置设置为必需,以便组件在激活时接收它,消除组件激活和配置之间的差距。我也意识到你可以通过modified
方法接收配置更新。
在我看来,这个功能非常类似于实现ManagedService
接口并将其作为您提供的“服务”之一发布的功能。
似乎我可以完全忽略ManagedService
&只需使用DS配置注入。
这些技术中的一种比其他技术更受欢迎,还是存在其他我没有看到的权衡?
答案 0 :(得分:13)
是的,您可以完全忽略ManagedService
和ManagedServiceFactory
,只使用Declarative Services组件。是的,我会推荐这种方法。
将此视为不同的抽象层次。 MS / MSF是配置管理员的低级API,即使您没有运行DS捆绑包,它也可用。这样做的好处是您可以编写可配置的服务而不依赖于DS,这可能是某些“系统级”组件所需要的。
但是,如果您愿意依赖DS,例如对于“应用程序级”组件,然后使用DS与config admin的内置集成将使您的生活更轻松。
答案 1 :(得分:0)
几个建筑的例子 declarative services 工厂:
1)通过config admin : carrot-osgi-scr-factory-cm
2)通过component factory : carrot-osgi-scr-factory-ds
查看用例测试;