我已经编写了一个 OSGi 包以在我的 eclipse 4 rcp 应用程序中使用它。如果我添加依赖项,在我的激活器中注册这些服务并将其注入我的类中,则服务的使用工作正常。
在活化剂中
IUserService service = new TestUserService();
context.registerService(IUserService.class.getName(), service, null);
在我的课上
@Inject
IUserService service;
service.getSth();
我读到通过声明性服务使用捆绑包应该是更好的方法。所以改变了我的实现。我在我的包中创建了一个组件定义来提供我的服务:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="usermanagement.test">
<implementation class="usermanagement.test.TestUserService"/>
<service>
<provide interface="usermanagement.IUserService"/>
</service>
</scr:component>
然后我从我的激活器中删除了服务注册并创建了一个服务消费者类:
public class UserServiceConsumer {
private IUserService service;
public synchronized void setQuote(IUserService service) {
this.service = service;
}
public synchronized void unsetQuote(IUserService service) {
if (this.service == service) {
this.service = null;
}
}
}
和另一个组件定义:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="UserServiceConsumer">
<implementation class="services.UserServiceConsumer"/>
<reference bind="setService" cardinality="1..1" interface="usermanagement.IUserService" name="IUserService" policy="static" unbind="unsetService"/>
</scr:component>
在这些修改之后,我的服务注入不再起作用。问题是注入的服务引用每次都是 NULL。
有谁知道为什么?我忘了什么吗?
非常感谢!