我最近刚刚偶然发现 OSGi 中的声明式服务可以将组件的配置设置为 required 以便组件在激活时接收它,从而消除了组件激活和配置之间的差距。我也意识到你可以通过modified
-method 接收配置更新。
在我看来,此功能与通过实现ManagedService
接口并将其作为您提供的“服务”之一发布所提供的功能非常相似。
似乎我可以完全忽略ManagedService
并只使用 DS 配置注入。
是这些技术中的一种优先于另一种,还是有其他我没有看到的权衡?
我最近刚刚偶然发现 OSGi 中的声明式服务可以将组件的配置设置为 required 以便组件在激活时接收它,从而消除了组件激活和配置之间的差距。我也意识到你可以通过modified
-method 接收配置更新。
在我看来,此功能与通过实现ManagedService
接口并将其作为您提供的“服务”之一发布所提供的功能非常相似。
似乎我可以完全忽略ManagedService
并只使用 DS 配置注入。
是这些技术中的一种优先于另一种,还是有其他我没有看到的权衡?
是的,您可以完全忽略ManagedService
并且ManagedServiceFactory
只使用声明式服务组件。是的,我会推荐这种方法。
只需将其视为不同级别的抽象。MS/MSF 是用于配置管理的低级 API,即使您没有运行 DS 包,它也可用。这样做的好处是您可以编写可配置的服务而不依赖于 DS,这对于某些“系统级”组件可能是可取的。
但是,如果您乐于依赖 DS,例如“应用程序级”组件,那么使用 DS 与配置管理的内置集成将使您的生活更轻松。
建立 声明式服务 工厂的几个例子:
1)通过配置管理员 : carrot-osgi-scr-factory-cm
2)通过组件工厂 : carrot-osgi-scr-factory-ds
查看用例的测试;