通过注释在Karaf上引用声明式服务

时间:2018-06-26 15:28:59

标签: apache-camel osgi apache-karaf declarative-services

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

public class TestServiceProcessor implements Processor {

  @Reference
  private TestService testService;

该服务已在Karaf实例上启动并运行,我可以使用运行良好的蓝图文件对其进行引用。

 <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 Annotation?

1 个答案:

答案 0 :(得分:2)

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

除此@Reference之外,仅在DS组件中有效。因此,您必须在类TestServiceProcessor上使用@Component进行批注...,但是不能在蓝图中使用它。 DS和蓝图是互斥的。

您可以做的是利用http://aries.apache.org/modules/blueprint-maven-plugin.html

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