Java servlet中的Guice注入
我是Google Guice框架的新手,我有一个关于在Guice servlet中注入和使用RequestScope的问题。好的,让我从我的代码中给出一些例子,让事情变得更清楚 我有一个bean类,比如beanJava 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
@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用户来说有点难,无论如何,感谢您的提示。