和传统基于web.xml的方式不同,servlet 3.0 ServletContainerInitializer 使用spring的WebApplicationInitializer来支持对servlet container的基于编程的配置支持。
- SpringServletContainerInitializer 由支持Servlet3.0+的Servlet容器实例化并调用。
- Servlet容器还会查询classpath下SpringServletContainerInitializer类上修饰的@HandlesTypes注解所标注的WebApplicationInitializer接口的实现类,这一步也是容器帮我们完成的。
- SpringServletContainerInitializer通过实现ServletContainerInitializer将自身并入到Servlet容器的生命周期中, 并通过自身定义的WebApplicationInitializer将依赖于Spring框架的系统初始化需求与Servlet容器解耦,即依赖于spring的系统可以通过实现WebApplicationInitializer来实现自定义的初始化逻辑, 而不需要去实现ServletContainerInitializer。