首页
学习
活动
专区
工具
TVP
发布

【SpringBoot源码解析】第三章:SpringBoot通过打成war包的方式是如何启动的

{ //省略其余代码 } 可以看到这个类继承了一个叫ServletContainerInitializer的接口 public interface ServletContainerInitializer...ServletContainerInitializer 是 Servlet 3.0 新增的一个接口,主要用于在容器启动阶段通过编程风格注册Filter, Servlet以及Listener,以取代通过web.xml...容器启动阶段依据java spi获取到所有ServletContainerInitializer的实现类,然后执行其onStartup方法....也就是说,我们把 ServletContainerInitializer的实现类写在 META-INF / services / javax.servlet.ServletContainerInitializer...SpringServletContainerInitializer就是ServletContainerInitializer的实现类,可以看到SpringServletContainerInitializer

85230
您找到你想要的搜索结果了吗?
是的
没有找到

Javaweb核心之注解开发Servlet

ServletException; } 同时可以利用@HandlesTypes注解,把要加载到onStartup方法中的类字节码传入进来,@HandlesTypes源码如下: /** * 用于指定要加载到ServletContainerInitializer...接口实现了中的字节码 * @see javax.servlet.ServletContainerInitializer * @since Servlet 3.0 */ @Target({ElementType.TYPE...}) @Retention(RetentionPolicy.RUNTIME) public @interface HandlesTypes { /** * 指定要加载到ServletContainerInitializer...Annotation manual"); } } 第三步:创建初始化容器的类,并按照要求配置 public class MyServletContainerInitializer implements ServletContainerInitializer...在目录中创建一个名称为javax.servlet.ServletContainerInitializer的文件,里面写实现了ServletContainerInitializer接口的全限定类名。

34820

SpringMVC基本使用关于DisptacherServlet关于ServletContainerInitializer最简单配置接收参数路径变量表单变量

SpringMVC运作的信息在以前,我们会在web.xml中配置SpringMVC,然后SpringMVC会根据web.xml中的配置初始化DisptacherServlet在servlet3.0之后,出现了ServletContainerInitializer...,可以在项目启动最开始时,会自动扫描实现了ServletContainerInitializer接口的类,对Servlet、Listener、Filter进行动态注册,利用此技术,可以通过实现ServletContainerInitializer...来配置DisptacherServlet(注册controller,ViewResolve),达到SpringMVC零配置的效果 关于ServletContainerInitializer (可以先跳过这部分...,往后面看)ServletContainerInitializer的作用和web.xml差不多,都是部署servlet,listener,filter,只是一个是用java代码配置,一个用xml配置在实现了...ServletContainerInitializer接口的类上要注解上@HandlesTypes(//要动态注册的class,一定要是Servlet或者Listener或者Filter)ServletContainerInitializer

1.1K60

【小家Spring】探讨注解驱动Spring应用的机制,详解ServiceLoader、SpringFactoriesLoader的使用(以JDBC、spring.factories为例介绍SPI)

使用方式:每个框架要使用ServletContainerInitializer就必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer...ServletContainerInitializer { ... } ServletContainerInitializer 是 Servlet 3.0 新增的一个接口,主要用于在容器启动阶段通过编程风格注册...原理 ServletContainerInitializer接口的实现类通过java SPI声明自己是ServletContainerInitializer 的provider 容器启动阶段依据java...(继承或者实现)的类放在ServletContainerInitializer接口的集合参数c中传递进来。...文件的 META-INF/services/javax.servlet.ServletContainerInitializer 文件中进行注册 SCI(全称 ServletContainerInitializer

1.8K42

Spring揭秘--寻找遗失的web.xml

ServletContainerInitializer 也是 Servlet 3.0 新增的一个接口,容器在启动时使用 JAR 服务 API(JAR Service API) 来发现 ServletContainerInitializer...而方法入参中 Set<class<class</class</class 这么声明一个 ServletContainerInitializer 的实现类,web 容器并不会识别它,所以,需要借助 SPI...寻找 spring 中 ServletContainerInitializer 的实现类并不困难,可以迅速定位到 SpringServletContainerInitializer 该实现类。...前者就会导致容器搜索算法出现问题,因为这是 jar 包的运行策略,不会按照 servlet3.0 的策略去加载 ServletContainerInitializer!...,后者 ServletContainerInitializer 是 javax.servlet.ServletContainerInitializer,前文还提到 RegistrationBean 实现了

1.2K31

【愚公系列】2023年03月 Java教学课程 089-Servlet服务器的注解开发

ServletException; } 同时可以利用@HandlesTypes注解,把要加载到onStartup方法中的类字节码传入进来,@HandlesTypes源码如下: /** * 用于指定要加载到ServletContainerInitializer...接口实现了中的字节码 * @see javax.servlet.ServletContainerInitializer * @since Servlet 3.0 */ @Target({ElementType.TYPE...}) @Retention(RetentionPolicy.RUNTIME) public @interface HandlesTypes { /** * 指定要加载到ServletContainerInitializer...初始化容器操作 * @Company http://www.itheima.com */ public class MyServletContainerInitializer implements ServletContainerInitializer...在目录中创建一个名称为javax.servlet.ServletContainerInitializer的文件,里面写实现了ServletContainerInitializer接口的全限定类名。

20930

spring mvc基于编码配置的原理

Spring mvc是跟着更底层的接口标准servlet走的,servlet3+以后引入ServletContainerInitializer接口,这为去web.xml,基于代码配置提供了一种途径: public...interface ServletContainerInitializer { public void onStartup(Set<Class<?...HandlesTypes(WebApplicationInitializer.class) public class SpringServletContainerInitializer implements ServletContainerInitializer...我们启动tomcat7(servlet3容器)时,容器通过JAR Services API 机制,探测到spring-web包下的一个文件META-INF/services/javax.servlet.ServletContainerInitializer...,文件内声明实现类,进而调用其onStartup方法,如果以后我们要自己实现ServletContainerInitializer ,也需要在相应jar包的 META-INF/services目录下放置这样一个以接口的全限定名命名的文件

869100

WebApplicationInitializer向左,ServletContextInitializer向右

关于第二点,也许大家觉得直接通过ServletContext对象调用addServlet()等方法就可以了,没必要再引入一个ServletContainerInitializer接口;非也非也!...一个ServletContext对象往往对应着一个Java Web应用,它是由Servlet容器创建的,开发者要想获取这个全局对象并不是很方便,于是才有ServletContainerInitializer...接口一说,它的内容如下: package javax.servlet; public interface ServletContainerInitializer { void onStartup...从官方文档的描述看,基于Spring Boot的Java Web应用会内嵌Servlet容器,如果沿用外置容器(Servlet容器 ==> ServletContainerInitializer ==>...Spring Boot所内嵌的Servlet容器并不会以SPI这种方式去加载ServletContainerInitializer,而是间接通过TomcatStarter触发,具体如下: package

65130

Spring全注解开发----Servlet 3.0

第一步:我们写一个MyServletContainerInitializer 类实现ServletContainerInitializer 接口 第二步:在这个路径下新建一个文件 注意:从运行结果可以分析出...的实现 2、提供ServletContainerInitializer的实现类; 必须绑定在,META-INF/services/javax.servlet.ServletContainerInitializer...文件的内容就是ServletContainerInitializer实现类的全类名; 总结:容器在启动应用的时候,会扫描当前应用每一个jar包里面 META-INF/services/javax.servlet.ServletContainerInitializer...类实现ServletContainerInitializer 接口 //容器启动的时候会将@HandlesTypes指定的这个类型下面的子类(实现类或者子接口等)传递过来 //传入感兴趣的类型 @HandlesTypes...(value = {HelloService.class}) public class MyServletContainerInitializer implements ServletContainerInitializer

56910

精尽Spring MVC源码分析 - 寻找遗失的 web.xml

ServletContainerInitializer 也是 Servlet 3.0 新增的一个接口,容器在启动时使用 JAR 服务 API(JAR Service API) 来发现 ServletContainerInitializer...文件来做到的,内容如下: cn.edu.shopping.CustomServletContainerInitializer 这样一来,使用 ServletContainerInitializer 和...前者就会导致容器搜索算法出现问题,因为这是 jar 包的运行策略,不会按照 Servlet 3.0 的策略去加载 ServletContainerInitializer!...最后作者还提供了一个替代选项:ServletContextInitializer,它和 ServletContainerInitializer 长得特别像,别搞混淆了!...是 javax.servlet.ServletContainerInitializer,前文提到的 RegistrationBean 就实现了 ServletContextInitializer 接口

58230

【小家Spring】Spring注解驱动开发---Servlet 3.0整合Spring MVC(不使用web.xml部署描述符,使用ServletContainerInitializer

ServletContainerInitializer 之前web容器要整合其余模块,都是通过web.xml来的。那么现在注解驱动的话,怎么做呢?...这就是Servlet3.0给我们提供的特别特别重要的一个类ServletContainerInitializer来整个其它模块组件。通过读Servlet3.0的官方文档如下: ?...的实现 coder可以自己提供ServletContainerInitializer的实现类;然后自己书写逻辑。...但是,但是,但是要记住,一定要必须绑定在,META-INF/services/javax.servlet.ServletContainerInitializer这个文件里,文件内容为就是ServletContainerInitializer...前面已经说过ServletContainerInitializer了,相信大家能够想到Spring是怎么做的了吧?直接参照Spring官方文档先看看: ?

2.7K20

SpringBoot有啥高科技?是怎么做到XML零配置的?

那接下来我们来看看SpringMvc的启动核心科技 首先tomcat是一个Servlet容器,遵循并实现了Servlet的规范,tomcat7之后是3.0的,在3.0的有个新的特性 就是它 :ServletContainerInitializer...前提是必须在对应的jar包的META-INF/services 目录创建一个名为javax.servlet.ServletContainerInitializer的文件,文件内容指定具体的ServletContainerInitializer...实现类 一般伴随着ServletContainerInitializer一起使用的还有@HandlesTypes注解,他会在调用onStartup方法的时候会把所有实现的类集合传给你。...} //准备上下文,主要会提前放入他自己的ServletContextInitializer(Servlet上下文是初始化器) //实现类,供SpringBoot在ServletContainerInitializer...server to trigger initialization listeners this.tomcat.start(); } 在这时候按照servlet3.0的标准,Tomcat启动的时候会调用ServletContainerInitializer

43430

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券