1

我有一个模块,它被定义为 Servlet 的内部类。

private static abstract class TestModule extends AbstractModule 
implements Provider<HttpSession> {

    @Override 
    protected void configure( ) {
     bind(HttpSession.class).toProvider( TestModule.class );
    }
    @Override public abstract HttpSession get( );
}

在 Servlet 的 doGet() 中,我创建了注入器,如下所示:

@Override 
protected void doGet( final HttpServletRequest req,
        HttpServletResponse resp ) throws ServletException, IOException {

    Injector injector = Guice.createInjector( new TestModule( ) {
        @Override 
        public HttpSession get( ) {
            return req.getSession( );
        } 
    });      
}

我得到错误:

1) 没有绑定 javax.servlet.http.HttpSession 的实现。

我究竟做错了什么?

4

1 回答 1

3

问题是你这样配置:

bind(HttpSession.class).toProvider( TestModule.class );

但 HttpSession 的实际提供者是您在创建注入器时创建的匿名内部类。

要解决这个问题,只需使用 Guice 的 ServletModule:http ://code.google.com/p/google-guice/wiki/ServletModule

于 2012-05-02T15:44:15.240 回答