getServletConfigClasses () против getRootConfigClasses () при расширении AbstractAnnotationConfigDispatcherServletInitializer

В чем разница междуgetServletConfigClasses() против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 делаю то же самое (например, инициализирующий взгляд), может быть, я это неправильно понял. Что такое на самом деле корневой контекст и диспетчерские сервлеты (я знаю это) впростой термин / пример

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос