HttpServlet可以与Spring DispatcherServlet共享应用程序上下文吗?

时间:2015-11-02 14:00:41

标签: spring spring-mvc servlets applicationcontext

我在WebApplicationInitializer.onStartup()中看到以下代码段:

    // The app context is created here.
    AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
    ctx.register(AppWebConfig.class);
    ctx.setServletContext(servletContext);

    // The app context is given to the DispatcherServlet: the new DispatcherServlet(ctx)
    Dynamic dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
    dynamic.setAsyncSupported(true);
    dynamic.addMapping("/");
    dynamic.setLoadOnStartup(1);
    dynamic.addMapping("*.*");

    // And the app context is given to InitServlet as well: the new InitServlet(ctx)
    Dynamic initServlet = servletContext.addServlet("initServlet", new InitServlet(ctx));
    initServlet.setLoadOnStartup(2);

基本上,ctxDispatcherServletInitServlet之间共享(这只是一个自定义的HttpServlet)。

我是Spring的新手,并不太确定正确使用各种应用程序上下文。

目前,我认为每个servlet都应该有自己的应用程序上下文。如果有beans to be shared,则应将其放入Root application context

因此,作者似乎希望将所有内容都放入a single big DispatcherServlet应用程序上下文中。可以吗?有什么警告吗?

ADD1

相关链接: Multiple application context, multiple dispatcher servlets?

1 个答案:

答案 0 :(得分:0)

DispatcherServlet本质上是一个servlet。 Spring应用程序上下文通常包含一堆singleton个对象。所以这个问题基本归结为: 2个servlet可以从相互存储库查询其依赖对象 吗?

如果2个servlet服务于完全不同的目的,则可能 rational 将其依赖对象放入相应的应用程序上下文中。但到目前为止,我认为没有强有力的理由这样做,但是一个意见问题