Java servlet中的Guice注入

Java servlet中的Guice注入,java,dependency-injection,guice,Java,Dependency Injection,Guice,我是Google Guice框架的新手,我有一个关于在Guice servlet中注入和使用RequestScope的问题。好的,让我从我的代码中给出一些例子,让事情变得更清楚 我有一个bean类,比如bean @RequestScope public class Bean { private String user; private String pass; // constructor which is @inject // getters and se

我是Google Guice框架的新手,我有一个关于在Guice servlet中注入和使用RequestScope的问题。好的,让我从我的代码中给出一些例子,让事情变得更清楚

我有一个bean类,比如bean

@RequestScope
public class Bean {
    private String user;
    private String pass;

    // constructor which is @inject 

    // getters and setters
}
这里有一个servlet

@Singleton
public class MainServlet extends HttpServlet {
    doGet(HttpServletRequest request, HttpServletResponse response) {
        .... some code 
        Injector injector = Guice.createInjector();
        ValidUser validUser = injector.getInstance(ValidUser.class)
        // Here i got the below exception
    }
}



com.google.inject.ConfigurationException: Guice configuration errors:

1) No scope is bound to com.google.inject.servlet.RequestScoped.
  at Bean.class while locating Bean
有趣的是,正如我们所知,servlet作用域是单例的。 还有,如何从http请求Bean实例中获取??因为据我所知,在注入Bean类的实例后,它会进入http请求,对吗

欢迎提供任何帮助或示例。 谢谢
Br

您正在servlet上的
doGet
方法中创建并使用
Injector
。。。它没有机会知道范围、当前请求或任何东西

Guice Servlet要求您设置通过
GuiceFilter
的所有请求,并创建
GuiceServletContextListener
的子类,该子类创建整个应用程序将使用的
注入器。本节中的Guice用户指南中介绍了所有这些

完成后,您可以将
@Inject
内容注入到
MainServlet
(甚至使用
@Inject
带注释的构造函数)。要在servlet中获得
Bean
的请求范围实例,需要插入
提供者
(因为
Bean
的范围比单例servlet小)。在请求中,您可以调用
beanProvider.get()
来获取当前请求的
Bean


请注意,servlet是单例的,因为在普通的Javaservlet世界中,它们也是这样工作的。。。它们每个应用程序只创建一次,单个实例用于对该servlet的所有请求。

Wow,这是一个很好的解释,但对于像我这样的新Guice用户来说有点难,无论如何,感谢您的提示。