2

我已经为一组特定的请求设置了一个过滤器,即 */dispatch 通过我的 Guice 侦听器。

在此过滤器中,我想根据请求 URI 更改每个请求中 BaseService 类型(包含一个方法的接口)的绑定。即,如果 URI 是 /hello/dispatch 我希望 BaseService 绑定到 HelloServiceImpl 否则如果 URI 是 /bye/dispatch 我想绑定到 ByeServiceImpl 。两者都实现了 BaseService 。

现在,在我参与 servlet 请求处理的随机类的某个地方,我想注入特定于当前请求的 BaseService 的适当实现。

这可能吗 ?如何 ?先感谢您。

4

1 回答 1

2

考虑使用工厂模式来提供不同类型的 BaseService。

public interface ServiceFactory
{
  public BaseService create(String uri);
}

public class ServiceFactoryImpl implements ServiceFactory
{
  @Override
  public BaseService create(String uri)
  {
    if(uri.equals("/hello/dispatch"))
      return new HelloServiceImpl();

    else if (uri.equals("/bye/dispatch"))
      return new ByeServiceImpl();

    return null;
  }
}

然后是您模块中的工厂。

bind(ServiceFactory.class).to(ServiceFactoryImpl.class);

并将其注入请求中。

于 2012-09-19T12:55:47.957 回答