春季启动,这里的根WebApplicationContext和Servlet WebApplicationContext

时间:2018-11-17 15:06:43

标签: spring spring-mvc spring-boot

我使用spring-boot-starter-web 1.5.17。找不到有关构建Root WebApplicationContext和Servlet WebApplicationContext的任何自动配置。

当不使用Spring Boot时,我们需要这样做

 = IF(OR(SUMPRODUCT(--((ISERR(SEARCH({"/amp/"},a2)))))>0),FALSE,TRUE)))))))))))))

我知道WebMvcAutoConfiguration做了很多春季MVC配置,但是我找不到自动构建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

}

如何知道这个bean是Root WebApplicationContext还是Servlet WebApplicationContext?

image here

2 个答案:

答案 0 :(得分:0)

默认情况下,Spring Boot Web(或其他)应用程序中只有一个应用程序上下文。它是在应用程序启动时由SpringApplication创建的。

答案 1 :(得分:0)

正确的方法是:

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);
    }
}

我从这里取了它:enter link description here 但是,仍然不清楚为什么默认情况下所有内容都在同一上下文中。 另外,我不确定是否可以在所有子上下文之间共享由WebMvcAutoconfiguration创建的其他bean。