我们使用Apache注释来处理应用程序中的所有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();
}
}发布于 2014-01-09 23:52:04
如果这两个提供程序在单独的包中,则可以停止Bundle A并启动Bundle B,以便在服务的实现之间切换。
如果这两个提供程序位于同一个包中,则需要将其放到OSGI并手动注册/取消注册服务,或者创建一个具有debugMode标志并委托给特定实现的代理版本的debugMode。
https://stackoverflow.com/questions/21033482
复制相似问题