【问题标题】:Guice: How to create HttpSessionProviderGuice:如何创建 HttpSessionProvider
【发布时间】:2012-05-02 15:40:41
【问题描述】:

我在下面有一个模块,它被定义为 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 的实现。

我做错了什么?

【问题讨论】:

    标签: java guice provider


    【解决方案1】:

    问题是你这样配置:

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

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

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

    【讨论】:

    • 有解决办法吗?基本上我需要在 doGet() 或 doPost() 中创建注入器时创建 Provider 的 get() 的实现。
    • 感谢 cmets。但现在它会抱怨 HttpServletRequest 没有被绑定。
    • @Mayumi 正如我在帖子末尾所说的那样,如果您使用提供这些的 ServletModule 则不会。实际上我应该回到我所说的,ServletModule 还提供了一个HttpSession 提供程序。
    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2022-03-26
    • 2023-03-04
    • 1970-01-01
    • 2015-08-19
    • 2015-10-09
    相关资源
    最近更新 更多