【源码】spring boot

springboot

1.没有web.xml,tomcat和spring是如何关联的?

Servlet3.0规范,可以通过java配置(注解等)省去web.xml配置。3.0规范,容器启动时会去项目根目录下的META-INF/services下找javax.servlet.ServletContainerInitializer这个文件。容器启动后会加载这个文件中的类(必须要实现ServletContainerInitializer),springboot在这个文件中配置了SpringServletContainerInitializer,web容器启动后,调用所有实现WebApplicationInitializer的onStartup方法--(SpringBootServletInitializer)。在这个SpringBootServletInitializer的onStartup方法中,启动了整个Spring容器。容器启动时会根据配置类WebMvcAutoConfiguration将配置类注册进去。
(在本地调试时使用SpringApplication.run来手动启动容器)

/**
* @HandlesTypes这个注解标明了该ServletContainerInitializer需要在启动时候处理哪些类,
然后服务器会把找到的这些类传到onStartup的第一个参数里

注意这里的类包括所配置类的子类,比如这里配置WebApplicationInitializer,
启动之后,就会把这个WebApplicationInitializer的子类都传进去
*/
@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {
        
    @Override
    public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
            throws ServletException {

        List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>();

        //.... 省略容错的一些代码
        initializers.add((WebApplicationInitializer) waiClass.newInstance());
        //.... 
    AnnotationAwareOrderComparator.sort(initializers);
        for (WebApplicationInitializer initializer : initializers) {
            initializer.onStartup(servletContext);
        }
    }

}
posted @ 2020-11-01 17:11  mu_阿成  阅读(72)  评论(0)    收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css