首页 > 解决方案 > 如何使用一个根上下文制作两个 AbstractAnnotationConfigDispatcherServletInitializer?

问题描述

我知道我可以通过这种方式写入具有一个根上下文的两个调度程序 servlet:

@Override public void onStartup(ServletContext servletContext) 抛出 ServletException {

// root context
AnnotationConfigWebApplicationContext rootContext =
        new AnnotationConfigWebApplicationContext();
rootContext.register(RootConfig.class); // configuration class for root context
rootContext.scan("...service", "...dao"); // scan only some packages
servletContext.addListener(new ContextLoaderListener(rootContext));

// dispatcher servlet 1
AnnotationConfigWebApplicationContext webContext1 = 
        new AnnotationConfigWebApplicationContext();
webContext1.setParent(rootContext);
webContext1.register(WebConfig1.class); // configuration class for servlet 1
webContext1.scan("...web1");            // scan some other packages
ServletRegistration.Dynamic dispatcher1 =
servletContext.addServlet("dispatcher1", new DispatcherServlet(webContext1));
dispatcher1.setLoadOnStartup(1);
dispatcher1.addMapping("/subcontext1");

// dispatcher servlet 2
...

}

但是我怎么能用 AbstractAnnotationConfigDispatcherServletInitializer 做到这一点?如果不可能 - 为什么我们可以使用两种方法 "getRootConfigClasses" 和 "getServletConfigClasses" ?

标签: javaspring

解决方案


我想我已经找到了决定——如果我们使用带有 AbstractAnnotationConfigDispatcherServletInitializer 的两个类——这意味着如果我们在其中一个类中定义方法 getRootConfigClasses 中的根类,另一个将返回空数组“{}”的类——第一个根类将是根类对于 DispatcherServlet 的


推荐阅读