java - Guice 风格的服务定位器

标签 java design-patterns gwt guice service-locator

有没有人见过/试图编写使用 Guice 风格配置系统的服务定位器模式?

目前我有一个 GWT 项目(恰好使用 GWT-RPC),它使用命令模式,其中我的 RPC servlet 看起来像这样......

public interface TransactionService extends RemoteService {

    <T extends Response> T execute(Action<T> action);
}

在我当前执行方法的实现中,我这样做...

if(action instanceof SomeActionImpl){
  doSomeActionImpl((SomeActionImpl)action);
}else if(action instanceof SomeActionImpl2){
  doSomeActionImpl2((SomeActionImpl2)action);
}

我想做的是找出一种方法来摆脱巨大的 if 语句。我需要一些方法来注册 ActionImpl1 的类应该委托(delegate)给 TransactioNService 的另一个实现。

有什么想法吗?我正在考虑向 HashMap 添加条目,其中键是 Action 的类,值是 ServiceImpl 的类。一是我有一个 ServiceImpl 类的引用,我可以使用 Guice 来获取 TransactionService 的一个实例。

最佳答案

看看 gwt-dispatch ( http://code.google.com/p/gwt-dispatch/ ) 中的 net.customware.gwt.dispatch.server.DefaultActionHandlerRegistry 类;它完全符合您的建议。这是存储处理程序的成员变量:

私有(private)最终 map <类>, ActionHandler> 处理程序;

如果要在服务器端执行处理程序,请使用 gwt-dispatch 服务器端组件;如果它是客户端的东西,那么考虑在 DefaultActionHandlerRegistry 上为您的调度类建模。

关于java - Guice 风格的服务定位器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1429901/

相关文章:

java - 如何摆脱使用 RxJava 实现 Firebase 注册的 instanceOf

c# - 请推荐一个将asp.net网站迁移到三层架构的方案

java - 如何为GWT编译器指定参数 "extra"的相对路径?

java - 如何使用Java获得从现在到过去三个小时之间的任意随机时间

java - 我们如何才能将数组访问到映射器中?

java - spring Controller 方法中的@Async

angular - Flux 与全局变量(在服务中)

c++ - 拥有接口(interface)和基类时如何避免向下转型?

java - 如何使用 Gwt 将生成的图像从服务器获取到客户端

java - 如何定义一些奇怪的 java 进程的主机?