bra*_*ebg 7 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 setters
}
Run Code Online (Sandbox Code Playgroud)
在这里,我有一个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
Run Code Online (Sandbox Code Playgroud)
这里有趣的是,我们知道servlet范围是单例.而且我怎样才能从http请求中获取 - Bean实例?因为据我所知,在注入Bean类的实例后,它会进入http请求,对吧?
欢迎任何帮助或示例.谢谢Br
Col*_*inD 16
你创建和使用Injector 内部的doGet上你的servlet方法......它有没有机会了解范围或当前请求或什么的!
Guice Servlet要求您设置所有请求,GuiceFilter并创建一个子类GuiceServletContextListener,创建Injector整个应用程序将使用的子类.这些都在Servlets部分的Guice用户指南中描述.
一旦你完成了,你就可以@Inject进入你的东西MainServlet(甚至使用带@Inject注释的构造函数).要获取Beanservlet内部的请求范围实例,您需要注入一个Provider<Bean>(因为Bean它的范围小于单例servlet).在请求中,您可以调用beanProvider.get()以获取Bean当前请求.
请注意,servlet是单例,因为它们在普通的Java servlet世界中也是如此工作......它们每个应用程序只创建一次,并且该单个实例用于对该servlet的所有请求.
| 归档时间: |
|
| 查看次数: |
9482 次 |
| 最近记录: |