如果我没看错,那么您仍然在服务器端的 OSGi 环境中,以及如何使用在同一容器中运行的服务(如 Karaf)。使用您的激活器,您可以在上下文中获得它,您尝试过吗?
另一种使用 Bnd Annotations 的方法需要在你的容器中安装声明性服务。然后使用 Bnd Annotations,您可以注释一个类似这样的类,其中“@Reference”将从容器中获取您需要的服务:
import java.util.Map;
import org.osgi.framework.BundleContext;
import aQute.bnd.annotation.component.Activate;
import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.Deactivate;
import aQute.bnd.annotation.component.Reference;
//Doesn't have to be called Activator
@Component
public class Activator {
private BundleContext context;
private TheServiceINeed theServiceINeed;
@Activate
public void Activate(BundleContext context, Map<String, Object> props) {
this.context = context;
}
@Deactivate
public void Deactivate() {
this.context = null;
}
public TheServiceINeed getTheServiceINeed() {
return theServiceINeed;
}
//The Service to process my String
@Reference
public void setTheServiceINeed(TheServiceINeed theServiceINeed) {
this.theServiceINeed = theServiceINeed;
}
}
您是否使用BndTools来完成您的工作?如果你问我的话,对 OSGi 开发来说非常方便。