首页 文章

在OSGi中使用服务和创建新对象之间的区别

提问于
浏览
0

我是CQ5的新手,当我通过OSGi概念时,我发现了一些叫做服务的东西 . 我创建了一个包含接口和实现类的bundle,它覆盖了该方法(只返回一个字符串"hello world") . 如果我想在jsp / some java类中使用该类,我将创建该对象的新实例并使用所以我的问题是,创建 new objectutilizing service. 之间的确切区别是什么?请提及服务优于新对象的优势 . 并帮助使用spring-DM配置服务 .

2 回答

  • 2

    除了@santiagozky的好答案之外,我还要补充说,另一个主要区别是依赖管理 .

    实例化对象时,将继承其所有依赖项 . 您永远受限于可以更改这些依赖项的实现中的更改 . 在使用服务时,您遵循Java编程到接口的最佳实践 . 您的代码与实现无关,并且仅依赖于接口依赖性,这些依赖性始终等于或小于实现 . 通常,一组更小的依赖项 . 修改现有实现或完全更改实现不会对您的代码产生任何影响 .

  • 0

    我想说组件和服务的主要区别在于它们的生命周期由OSGi管理 . 这意味着他们的状态独立于使用该组件的类 .

    您的OSGi服务具有状态,它可用于存储信息或响应消息,并且它们将超出使用它们的类的范围 . 它们还允许您将接口与实际实现分开 . 您可以轻松地在正在运行的实例中交换某个服务的实现(IE,将提供程序从v1升级到v1.0.1) . 此外,您可能希望暂时停止组件而不关闭应用程序 . 激活后,服务将再次连线 .

    每个人的基本用例都是关于他们的功能 . 如果一个类只是一个带有一些getter和setter的bean,你可能会实例化它,填充它并在需要时使用它 . 另一方面,如果一个类提供某种功能(处理,存储,排队等) . 它可能应该是一项服务 . 具有许多静态方法(帮助程序,管理程序)的类通常可以非常容易地重构为服务 .

    不确定spring-dm . 但在Adobe CQ5中,您通常使用Felix annotations进行声明式服务

相关问题