весенняя загрузка, где находится корневой WebApplicationContext и сервлет WebApplicationContext - PullRequest
0 голосов
/ 17 ноября 2018

Я использую spring-boot-starter-web 1.5.17. Я не могу найти никакой автоматической настройки для сборки Root WebApplicationContext и Servlet WebApplicationContext.

Когда не используется пружинный ботинок, нам нужно сделать это

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected String[] getServletMappings() {
    return new String[]{"/"};
}


@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class<?>[]{SecurityAdminConfig.class, DataSourceConfig.class, JavaConfig.class};
}

@Override
protected Class<?>[] getServletConfigClasses() {
    return new Class<?>[]{WebMvcConfig.class};
}
//controller、service

Я знаю, что WebMvcAutoConfiguration выполняет большую часть весенней конфигурации MVC, но не могу найти информацию об автоматической сборке Root WebApplicationContext и Servlet WebApplicationContext.

public abstract class AbstractAnnotationConfigDispatcherServletInitializer
    extends AbstractDispatcherServletInitializer {

@Override
protected WebApplicationContext createRootApplicationContext() {
    Class<?>[] configClasses = getRootConfigClasses();
    if (!ObjectUtils.isEmpty(configClasses)) {
        AnnotationConfigWebApplicationContext rootAppContext = new AnnotationConfigWebApplicationContext();
        rootAppContext.register(configClasses);
        return rootAppContext;
    }
    else {
        return null;
    }
}

@Override
protected WebApplicationContext createServletApplicationContext() {
    AnnotationConfigWebApplicationContext servletAppContext = new AnnotationConfigWebApplicationContext();
    Class<?>[] configClasses = getServletConfigClasses();
    if (!ObjectUtils.isEmpty(configClasses)) {
        servletAppContext.register(configClasses);
    }
    return servletAppContext;
}


protected abstract Class<?>[] getRootConfigClasses();


protected abstract Class<?>[] getServletConfigClasses();

}

Как узнать, что эти bean-компоненты отправляются в корневой WebApplicationContext или Servlet WebApplicationContext?

изображение здесь

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Правильный способ сделать это был бы следующим:

public class App {
    public static void main(String[] args) {
        new SpringApplicationBuilder()
          .parent(ParentConfig.class).web(WebApplicationType.NONE)
          .child(WebConfig.class).web(WebApplicationType.SERVLET)
          .sibling(RestConfig.class).web(WebApplicationType.SERVLET)
          .run(args);
    }
}

Я взял его отсюда: введите описание ссылки здесь Однако до сих пор не ясно, почему по умолчанию всенаходится в том же контексте. Кроме того, я не уверен, нормально ли, что другие bean-компоненты, созданные WebMvcAutoconfiguration, будут совместно использоваться во всех дочерних контекстах.

0 голосов
/ 19 ноября 2018

По умолчанию в веб-приложении Spring Boot (или иным образом) существует один контекст приложения.Он создается SpringApplication при запуске приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...