我已经阅读了几篇有关@Service
和@Component
之间差异的文章。现在,我知道@Component
是用户将对象注释为OSGi组件,然后其生命周期将由OSGi管理。
但是,用@Service
将对象声明为服务的需求是未知的。如果在声明为组件的对象中编写业务逻辑会发生什么?
我还想知道以下语句意味着什么:
组件可以引用/调用(使用容器注入– @Reference)其他服务,但组件不能。换句话说,一个组件不能注入到另一个组件/服务中。只有服务可以注入到另一个组件中。
答案 0 :(得分:4)
问题1:
Apache Felix中的@Service批注是什么?
@Service注释定义是否以及哪些服务接口 由组件提供。
您应该了解,这是关于 OSGi服务概念的,而不是@Component
描述的声明性服务(DS)概念。
避免使用Felix SCR(程序包org.apache.felix.scr.annotations
)中的注释。
http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html:
注释本身不支持R6或 以上。建议使用官方的OSGi注释 而是声明式服务。
使用软件包@Component
中的org.osgi.service.component.annotations
,此注释将替换Felix中的@Component
和@Service
。
问题2
如果您在其中编写业务逻辑会发生什么 被声明为组件的对象?
工作正常。
问题3
我还想知道以下语句意味着什么:
组件可以引用/调用(使用容器注入– @Reference)其他服务,但组件不能。换句话说,一个组件不能注入到另一个组件/服务中。只有服务可以注入那里的另一个组件。
这是组件共享OSGi中功能的方式。他们提供其功能作为OSGi服务。但是,当OSGi将对象注入到引用中时,就可以得到组件。
奖金:请阅读这篇文章:https://medium.com/adobetech/using-the-osgi-declarative-service-in-aem-6-4-21102f649d54