我在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);
基本上,ctx
在DispatcherServlet
和InitServlet
之间共享(这只是一个自定义的HttpServlet)。
我是Spring的新手,并不太确定正确使用各种应用程序上下文。
目前,我认为每个servlet都应该有自己的应用程序上下文。如果有beans to be shared
,则应将其放入Root application context
。
因此,作者似乎希望将所有内容都放入a single big
DispatcherServlet应用程序上下文中。可以吗?有什么警告吗?
相关链接: Multiple application context, multiple dispatcher servlets?
答案 0 :(得分:0)
DispatcherServlet本质上是一个servlet。 Spring应用程序上下文通常包含一堆singleton
个对象。所以这个问题基本归结为: 2个servlet可以从相互存储库查询其依赖对象 吗?
如果2个servlet服务于完全不同的目的,则可能 rational 将其依赖对象放入相应的应用程序上下文中。但到目前为止,我认为没有强有力的理由这样做,但是一个意见问题。