В чем разница между getServletConfigClasses()
vs getRootConfigClasses()
при расширении AbstractAnnotationConfigDispatcherServletInitializer
.
Я читал много источников с сегодняшнего утра, но у меня пока нет четкого понимания различий:
Пожалуйста, просмотрите эти две конфигурации:
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()
но почему тогда ConServlet и WebConfig делают то же самое (например, представление инициализации), возможно, я это неправильно понял. На самом деле это корневой контекст и сервлет-диспетчер (я знаю этот) в простом/примерном
Спасибо!