getServletConfigClasses() vs getRootConfigClasses() 当扩展 AbstractAnnotationConfigDispatcherServletInitializer 时关于层次结构的一点ApplicationContext 说话很便宜,给我看代码! 延伸阅读
在扩展 AbstractAnnotationConfigDispatcherServletLetLetInitializer
时,getServletConfigClasses()
与 getRootConfigClasses()
之间的区别是什么?自今天早上以来,我一直在阅读很多资料,但我还没有对差异有任何清晰的理解:
请看一下这两种配置:
1).
public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { ConServlet.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
....
....
}
ConServlet.class
指的是
@EnableWebMvc
@Configuration
@ComponentScan({ "com" })
@Import({ SecurityConfig.class })
public class ConServlet {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
2).
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class };
}
.....
}
WebConfig.class指的是
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "....." })
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
我看到ConServlet和WebConfig(或多或少)都在做同样的事情,比如初始化视图:
但是为什么:
-
ConServlet 在
getRootConfigClasses()
中返回 - 而 WebConfig 在
getServletConfigClasses()
中返回
我已阅读文档
getRootConfigClasses() 和 getServletConfigClasses() 都适用于
指定要提供给@Configuration和/或@Component类。(它们的区别)
-
getRootConfigClasses()
的根应用程序上下文 -
getServletConfigClasses()
的调度程序 Servlet 应用程序上下文
但是为什么ConServlet和WebConfig做同样的事情(比如启动视图),也许我是那个误解它的人。在简单的术语/示例中,实际上是根上下文和调度程序 servlet(我知道这个)
谢谢!