如何使用guice绑定到Web应用程序中每个请求中的不同实现

时间:2012-09-19 10:48:39

标签: java guice

我为一组特定的请求设置了一个过滤器,即通过我的Guice Listener进行* / dispatch。

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

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

这可能吗?怎么样 ?提前谢谢。

1 个答案:

答案 0 :(得分: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);

并将其注入请求。