Apache camel 通过注释在Karaf上引用声明性服务

Apache camel 通过注释在Karaf上引用声明性服务,apache-camel,osgi,apache-karaf,declarative-services,Apache Camel,Osgi,Apache Karaf,Declarative Services,我无法正确引用带有@reference注释的服务接口 public class TestServiceProcessor implements Processor { @Reference private TestService testService; 该服务已在Karaf实例上启动并运行,我可以使用blueprint文件引用它,该文件工作正常 <bean id="translateOIDs" class="com.test.TestServiceProcessor"&g

我无法正确引用带有@reference注释的服务接口

public class TestServiceProcessor implements Processor {

  @Reference
  private TestService testService;
该服务已在Karaf实例上启动并运行,我可以使用blueprint文件引用它,该文件工作正常

 <bean id="translateOIDs"
 class="com.test.TestServiceProcessor">
 <property name="TestService" ref="testservice" />
 </bean>

 <reference id="testservice"
 interface="com.test.TestService"/>

该服务已使用OSGI组件注释设置

我已经在Karaf上安装了scr功能和camel scr。 我试着使用场地策略和活动策略


我是否需要进一步配置Karaf实例,或者我是否以错误的方式使用@Reference注释?

首先,您需要安装scr功能以启用声明性服务。我猜你的意思是“src”特性

除此之外,@Reference仅适用于DS组件。所以您的类TestServiceProcessor必须用@Component注释。。。但它不能用于蓝图。DS和blueprint是互斥的

相反,您可以做的是利用


在这种情况下,您需要用@Named注释bean类,并用@inject进行注入。然后,您还可以通过使用@Named(“yourid”)设置的id从常规blueprint上下文引用带注释的bean。

首先,您需要安装scr功能以启用声明性服务。我猜你的意思是“src”特性

除此之外,@Reference仅适用于DS组件。所以您的类TestServiceProcessor必须用@Component注释。。。但它不能用于蓝图。DS和blueprint是互斥的

相反,您可以做的是利用

在这种情况下,您需要用@Named注释bean类,并用@inject进行注入。然后,还可以通过id从常规blueprint上下文引用带注释的bean,可以使用@Named(“yourid”)设置id