Osgi @服务用于在CQ中创建服务,那么BundleContext.registerService方法的用途是什么?

Osgi @服务用于在CQ中创建服务,那么BundleContext.registerService方法的用途是什么?,osgi,aem,osgi-bundle,Osgi,Aem,Osgi Bundle,ComponentContext与BundleContext有多大的不同,因为我在这两个方面都看到了getServiceReference方法,ComponentContext是由声明性服务规范定义的,并且是用于DS组件的。它的目的不是提供Bundle上下文的所有特性 如果您需要BundleContext,只需从ComponentContext获取它,甚至可以将它作为参数注入@Activate方法。registerService()和@Service注释都允许您创建OSGi服务。区别在于Bund

ComponentContext与BundleContext有多大的不同,因为我在这两个方面都看到了getServiceReference方法,ComponentContext是由声明性服务规范定义的,并且是用于DS组件的。它的目的不是提供Bundle上下文的所有特性

如果您需要BundleContext,只需从ComponentContext获取它,甚至可以将它作为参数注入@Activate方法。

registerService()和@Service注释都允许您创建OSGi服务。区别在于BundleContext.registerService()使用纯OSGiAPI,而@Service注释依赖于OSGi声明性服务

当您使用声明性服务时,服务的整个生命周期都是为您管理的,如果您手动注册您的服务,您需要自己进行注册


最后,这两种机制都为您提供了创建OSGi服务的方法。一个更简单,另一个更强大。

Hi..ComponentContext可以使用global.jsp获得,而BundleContext不是??我想global.jsp是特定于CQ的,所以我不知道它的细节。如果您可以获得ComponentContext,那么您可以随时从中检索BundleContext。非常感谢您的回复。。它解决了我的problem@prabhatGaur你似乎混淆了一些概念。“组件”一词用于多个上下文。它可以指一个OSGi组件(Christian正在谈论的)或一个用于内容创作的AEM组件(您对global.jsp的评论),非常感谢@Santiagozy。global.jsp指的是com.day.cq.wcm.api.components.ComponentContext,而不是org.osgi.service.component.ComponentContext。尽管如此,我仍然对registerService方法的使用感到好奇