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

时间:2014-02-21 13:06:52

标签: osgi cq5 spring-dm

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

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