SpringBoot的嵌入式Servlet容器自动配置原理2

    科技2022-08-01  110

    SpringBoot的嵌入式Servlet容器自动配置原理1

    这部分,我们主要是看一下SpringBoot中的例子。我们先在依赖中找到类作为例子

    找到web模块下的EmbeddedWebServerFactoryCustomizerAutoConfiguration类:(旧版源码是EmbeddedServletContainerAutoConfiguration类   )

     

    这个类也和旧版源码有挺大不同了,2.x中把自定嵌入式容器工厂的校验去掉了。

    新的源代码已经改了,核心是如下几个。其实质就似乎在判断是哪种容器就创建一个什么容器。

     

     

    接下来我们应该找的是:TomcatServletWebServerFactory.class

    当中有一个getWebServer()方法

     

    对这个类的介绍大致如下:

     

    最后一步的return this.getTomcatWebServer(tomcat)是将配置好的tomcat传进去,返回一个嵌入式的tomcat。

    我们可以找到这个方法.getTomcatWebServer

     

    点进TomcatWebServer可以再详细看看

    里面传了三个参数,有两个比较关键,分别是tomcat和autoStart。同时还需要注意  this.initialize() 点进去看看

    而this.tomcat.start()则是最为关键的,tomcat在此就启动了。于是我们产生一个疑问:我们对嵌入式容器的配置修改是怎么生效?以前我们在配置自定义嵌入式容器时,是采用两种方式的

    ServerProperties和EmbeddedServletContainerCustomizer

     

    EmbeddedServletContainerCustomizer:定制器帮我们修改了Servlet容器的配置。那么它到底是怎么帮我们配置的呢?

    答:在容器中导入了EmbeddedServletContainerCustomizerBeanPostProcessor(即后置处理器)

    注意这两个类的命名是十分讲究的。那么属性文件又是怎么生效的呢?其实可以点击属性,进入后发现是个serverProperties绑定在一起了,而serverProperties也是嵌入式容器定制器。

     

    因此我们可以串连起整个流程:

    1)、SpringBoot根据导入的依赖情况,给容器中添加相应的EmbeddedServletContainerFactory以【TomcatEmbeddedServletContainerFactory】为例

    2)一旦加进容器中,容器中某个组件要创建对象就会惊动后置处理器;EmbeddedServletContainerCustomizerBeanPostProcessor;

    只要是嵌入式的Servlet容器工厂,后置处理器就工作;

    3)、后置处理器的工作作用是,从容器中获取所有的EmbeddedServletContainerCustomizer,调用定制器的定制方法

    Processed: 0.012, SQL: 8