Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ApacheFelix中的@Service注释是什么?_Service_Annotations_Osgi_Aem_Sling - Fatal编程技术网

ApacheFelix中的@Service注释是什么?

ApacheFelix中的@Service注释是什么?,service,annotations,osgi,aem,sling,Service,Annotations,Osgi,Aem,Sling,我读过几篇关于@Service和@Component之间区别的文章。现在我了解到,@Component是一个将对象注释为OSGi组件的用户,其生命周期将由OSGi管理。 但是,使用@service将对象声明为服务的必要性是未知的。如果在声明为组件的对象中编写业务逻辑,会发生什么情况 我还想知道下面的陈述是什么意思: 组件可以引用/调用(使用容器注入–@Reference)其他服务,但不能引用/调用组件。换句话说,一个组件不能注入到另一个组件/服务中。只有服务可以注入到另一个组件中 问题1: A

我读过几篇关于
@Service
@Component
之间区别的文章。现在我了解到,
@Component
是一个将对象注释为OSGi组件的用户,其生命周期将由OSGi管理。 但是,使用
@service
将对象声明为服务的必要性是未知的。如果在声明为组件的对象中编写业务逻辑,会发生什么情况

我还想知道下面的陈述是什么意思:

组件可以引用/调用(使用容器注入–@Reference)其他服务,但不能引用/调用组件。换句话说,一个组件不能注入到另一个组件/服务中。只有服务可以注入到另一个组件中

  • 问题1:

    ApacheFelix中的@Service注释是什么

    :

    @Service注释定义了是否和哪些服务接口 由组件提供

    您应该了解,这是关于OSGi服务的概念,而不是
    @Component
    中描述的声明性服务(DS)概念

避免使用Felix SCR的注释(包
org.apache.Felix.SCR.annotations

:

注释本身不支持R6或R6的新功能 在上面建议使用官方的OSGi注释 而不是声明性服务

使用package
org.osgi.service.Component.annotations
中的
@Component
,此注释将替换Felix中的
@Component
@service

  • 问题2

    如果将业务逻辑写入 声明为组件的对象

    碰巧工作很好

  • 问题3

    我还想知道下面的陈述是什么意思:

    组件可以引用/调用(使用容器注入–@Reference)其他服务,但不能引用/调用组件。换句话说,一个组件不能注入到另一个组件/服务中。只有服务可以注入到另一个组件中

    这就是组件在OSGi中共享功能的方式。它们提供OSGi服务的功能。但是当OSGi将对象注入到引用中时,就得到了组件


奖励:阅读本文:

看看下面的SO问题,也许他们已经回答了你的问题:或者我已经阅读了这些帖子,但不幸的是,没有其他关于堆栈溢出的帖子详细讨论服务注释。所以本质上,@service注释只是将组件声明为可以注入其他对象的对象。现在对于R6注释,它被声明为组件注释的一个属性?这种理解正确吗?顺便说一句,我喜欢这篇有奖文章。是的,但是
@Service
是一个附带的注释,我怀疑没有
@Component
它是否能工作。不客气:)不会的。但是对于R6,您根本不需要包含服务注释。谢天谢地,OSGi注释通过组件注释中的一个属性实现了它。。。有些组件需要是服务,因此可以将它们注入到其他组件中。这是因为它们实现了一些由Java接口描述的功能。但是,有些组件不需要是服务,因为它们提供了直接与用户或环境交互的“顶级”功能。例如,实现web服务器的组件。或者实现GUI外壳的一个。或者某种只与文件交互的批处理组件。关键是,并非所有组件都只是坐在那里等待调用。