springboot源码(3)
springboot项目有着自己的内嵌Web容器,我们只需要在pom文件里加入对于的web容器依赖就可以,那到底其中的原理是什么呢?我们又应该怎么来做相应的配置;
与配置spring mvc相同,我们要看springboot的自动装配,只需在
这里找到对应的配置类就好,请记住web容器的这个配置类:ServletWebServerFactoryAutoConfiguration、打开它
这里重点看import的4个类,第一个类先跳过,后面再讲解,我们先看springboot为我们自动装配的这3个web容器,以tomcat容器为例,打开:
可以看到,其实这个EmbeddedTomcat本身也是个配置类,里面会把一个TomcatServletWebServerFactory对象注入到spring容器中,我们打开这个对象,找到其中一个比较重要的方法:getWebServer方法
里面会帮我们new一个Tomcat,这里之所以可以直接new是因为springboot本身就有依赖:
最后的这个getTomcatWebServer是springboot本身对tomcat的再封装:
而这个TomcatWebServer类:
可以看到,这个封装的tomcat对象的类最终会执行start()方法;
看完了上面tomcat自动装配的整个流程,其实了解源码过程,在应用中作用最大的就是可以自己修改tomcat配置,最常用的自然就是在配置文件中配置,而这些配置参数其实都存在ServerProperties这个类中中:
如果要改相关参数,在这个类中找到对应的属性然后在配置文件中修改即可;而看完tomcat的一个内嵌过程,其实还有另一种方法:
其实springboot里面做的也不过就是注入个TomcatServletWebServerFactory这个bean,那我们完全可以在配置类中自己配置,配置完之后由于
这个标注的存在,springboot内置的TomcatServletWebServerFactory类就自然不会再次注入了;
但其实springboot推荐的是:
这个方法,就要说回之前文章跳过的一个类了:ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class
这个也是ServletWebServerFactoryAutoConfiguration这个配置类会注入的一个类,我们打开它:
里面会注册一个处理WebServerFactoryCustomizer对象的后置处理器:WebServerFactoryCustomizerBeanPostProcessor,打开这个处理器:
这里就会拿到我们自己在配置类配置好的WebServerFactoryCustomizer类,进而使我们的配置在项目中生效;