gpt4 book ai didi

java - Guice 注入(inject) servlet

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:28 24 4
gpt4 key购买 nike

我是 Google Guice 框架的新手,我有一个关于注入(inject) 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 实例?因为据我所知,在注入(inject) Bean 类的实例后,它会进入 http 请求,对吗?

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

最佳答案

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

Guice Servlet 要求您将所有请求设置为通过 GuiceFilter并且您创建了 GuiceServletContextListener 的子类创建 Injector你的整个应用程序将使用。这在 Servlets 的 Guice 用户指南中都有描述。部分。

完成后,您可以 @Inject东西到你的MainServlet (甚至使用 @Inject 带注释的构造函数)。获取 Bean 的请求范围实例在 servlet 中,您需要注入(inject)一个 Provider<Bean> (因为 Bean 的范围比单例 servlet 小)。在请求中,您可以调用 beanProvider.get()得到Bean对于当前请求。

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

关于java - Guice 注入(inject) servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6121190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com