当前位置: 首页 > 知识库问答 >
问题:

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

何兴学
2023-03-14

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

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

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

这可能吗?怎么做?提前谢谢你。

共有1个答案

胡高朗
2023-03-14

考虑使用工厂模式来提供不同类型的基础服务。

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);

并将其注入请求中。

 类似资料:
  • 问题内容: 我的网络应用程序出现“找不到线程绑定的请求”错误,希望获得帮助。我正在尝试使用struts2 + spring + hibernate,并使用spring管理hibernate会话工厂,并将hibernate会话注入我的struts动作中。我希望这是有道理的。当应用启动时,没有任何错误,但是当我发出第一个Web请求时,它以“未找到线程绑定的请求”错误轰炸。这是我的spring配置: 这

  • 问题内容: 我是否需要创建一个将接口绑定到其他实现的新模块? 我无法触摸厨师课堂或界面。我只是在运行时将Chef的FortuneService绑定到不同接口的客户端。 问题答案: 外观类似于Guice常见问题解答中的“ 机器人腿”部分。“如何创建一个带有两个Leg对象的机器人,左边的一个对象注入一个LeftFoot,右边的一个注入RightFoot。” 但是只有一个在两个上下文中都可以重用的Leg

  • 我有一组15-20个类,它们依赖于一个用绑定类型参数实现泛型接口的类。界面如下所示: 处理程序的单个实现使用反射来处理Foo的所有特殊情况,因为它们都“相似但不同”。 我希望能够在其协作者中以类型安全的方式使用此类,例如: 其中,条形图和Baz都扩展到Foo。不幸的是,Guice抱怨处理程序 我还尝试了以下操作,这会导致编译器错误,因为ConcreteHandler不是Handler的子类 我有这

  • 问题内容: 我有一个Swing应用程序,我希望将其从意大利面条转换为对Guice使用依赖项注入。使用Guice提供诸如配置和任务队列之类的服务的过程非常好,但是我现在是从应用程序的GUI开始的,不确定如何进行。 该应用程序基本上是,在中带有一堆标签。每个选项卡都是一个单独的子类,该子类列出了各种组件,并且需要服务才能在按下某些按钮时执行操作。 在当前应用程序中,这看起来像这样: 显然,这并不完全遵

  • 我有一组验证器类,它们都扩展了一个公共抽象类,它们都具有相同的构造函数 我想要Guice的能力 < li >知道如何构造所有这些验证器,将相同的数据源注入所有这些验证器中 < li >使用多绑定器将所有验证器注入到一个类中 通过一些谷歌搜索,看起来我可以使用,但问题是如果我想这样做,我必须为每个验证器创建一个工厂,这是一个巨大的样板。因为他们都有相同的构造函数,我觉得一定有更好的方法。我的对象是在