【发布时间】:2011-09-15 20:09:10
【问题描述】:
我想在 Vaadin 应用程序中使用 Guice(但这不应该是 Vaadin 特定的)。
在我的 Vaadin MyApp(扩展应用程序类)中,我可以使用 @Inject 注释将模块中定义的实现注入到我的自定义 ContextListener 扩展 GuiceServletContextListener 中,在该模块中创建注入器。
我现在想在我的应用中从 Everywhere 访问实现,但我总是得到 NullPointerExceptions。
我认为使用 guice 创建顶级对象(这将是 mycase(?) 中的应用程序类)就足够了,这样从这个类创建的每个对象(在本例中为 new)都可以注入。
如果我使用 Injector.getInstance(..) 创建每个对象,它会起作用,但是使用这种方法我必须创建每个“中间”类,甚至不使用 @Inject 与此方法。
我希望用 guice 做的事情是否可行,或者我错过了什么?我的主要目的是从项目中的任何地方访问 DAOFactory 实现(需要在会话范围内),而无需将其传递给每个构造函数。
谢谢,iamgalaxys
我正在使用的一些代码:
ApplicationServlet:
@Singleton
public class GuiceApplicationServlet extends AbstractApplicationServlet {
private static final long serialVersionUID = -5729153715228068816L;
// Guice stuff
protected final Provider<Application> applicationProvider;
@Inject
public GuiceApplicationServlet(Provider<Application> applicationProvider) {
this.applicationProvider = applicationProvider;
}
@Override
protected Class getApplicationClass() throws ClassNotFoundException {
return Application.class;
}
@Override
protected Application getNewApplication(HttpServletRequest request) throws ServletException {
return applicationProvider.get();
}
上下文监听器:
public class MyContextListener extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
ServletModule module = new ServletModule() {
@Override
protected void configureServlets() {
...
serve("/*").with(GuiceApplicationServlet.class, params);
}
我已经在 web.xml 中定义了 Guice Filter 和 ContextListener
【问题讨论】:
标签: java servlets guice vaadin