我们正在使用Apache Felix注释来处理我们应用程序中的所有OSGi内容。我有一个与服务器通信的提供程序类。我有一个消费者类,用来处理来自服务器的数据。我想要的是创建另一个提供者实例(新类实现接口),仅用于调试目的,返回消费者对请求的预设响应。理想情况下,我希望消费者不知道这种切换。它的提供者服务参考将被简单地替换。
用例:当开发人员在无法访问实际服务器的计算机上运行时,他按下我们正在运行的应用程序中的按钮,从真实的提供程序实例切换到我们的调试提供程序实例。
推荐的方法是什么?
示例代码:
public interface IProvider{
public String getDataFromServer();
}
@Component
@Service(value=IProvider.class)
public class RealProvider implements IProvider{
@Override
public String getDataFromServer(){
...
}
}
@Component
@Service(value=IProvider.class)
public class DebugProvider implements IProvider{
@Override
public String getDataFromServer(){
return "Hello World";
}
}
@Component
public class Consumer{
private @Reference IProvider provider;
public void doSomething(){
provider.getDataFromServer();
}
}
答案 0 :(得分:0)
如果两个提供商位于不同的捆绑包中,您可以停止捆绑A并启动捆绑包B以在服务的实现之间切换。
如果两个提供程序位于同一个包中,则需要下拉到OSGI API并手动注册/取消注册服务,或者创建具有debugMode标志的IProvider代理版本并委托给特定的实施