JAVA语言之小编带着小白看springboot源码7
小标 2019-02-28 来源 : 阅读 873 评论 0

摘要:本文主要向大家介绍了JAVA语言之小编带着小白看springboot源码7,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之小编带着小白看springboot源码7,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

JAVA语言之小编带着小白看springboot源码7

上一节在springboot中配置了servlet三大组件以及嵌入式servlet容器,并且还简单的说了如何切换不同的容器。


  这一节就来说说如何改变servlet容器的配置参数,一般有两种常见的方式,第一种:配置文件(properties和yml);第二种:往容器里添加组件的方式


  注意注意:我这里说的容器和嵌入式容器不一样的,容器指的是ioc容器,嵌入式servlet容器值得是servlet容器,不要混淆了


1.通过配置文件的方式配置


  yml为例,下图所示,这是配置容器启动的端口

而且我们可以点开这个端口,可以发现

而这个ServerProperties的很多属性,port,adress,serverPath等等都可以在配置文件中server.xxx=xxxxx进行修改。


在这个类中,起作用的主要是这个customize方法来设置容器的属性

2.通过嵌入式servlet容器定制器设置(这种配置比上面优先级高)


  随便找个配置类,如下代码(也可以配置其他属性,我用最简单的port演示一下)

可以启动容器,看控制台,8082端口,启动成功,而且覆盖了yml配置的8080端口,这种方式的优先级更高。

3.一起来剖析原理(Tomcat为例)


  我们可以发现这两种的本质是一样的,最终都是向容器里添加一个嵌入式servlet容器定制器,执行其中的customize方法。


  那么,我们从哪里入手呢?(不用想,肯定是自动配置类啊,记住,一切配置入手都是从自动配置类开始)


  打开一个叫做EmbeddedServletContainerAutoConfiguration的类,翻译就叫做嵌入式servlet容器自动配置。

重点是这个自动配置类里面的配置(就以默认的tomcat为例)

只要添加了tomcat的依赖,会为ioc容器里面添加Tomcat的嵌入式servlet容器工厂,打开这个容器工厂

点开这个类之后。我们主要看这里

一直到这里,tomcat的配置都过了一遍,总结一下啊:只要EmbeddedServletContainerAutoConfiguration这个配置类生效------->向ioc容器导入TomcatEmbeddedServletContainerFactory组件---------->这个tomcat嵌入式容器工厂里面会创建正常Tomcat容器对象---------->然后进行封装成嵌入式类型的容器,内部会直接启动Tomcat,从这里可以大概看出来先启动的ioc容器,然后再是Tomcat容器


  是不是还忘记了前面说的,这个自动配置类要起作用,会提前在ioc容器中导入一个注册器,这个组件很关键,他会在EmbeddedServletContainerAutoConfiguration自动配置类之前先给容器中注册一些后置处理器,在ioc容器中满足条件的Bean创建对象并且赋值好了,调用初始化方法之前,会做一些准备工作,下面我们打开这个注册器BeanPostProcessorsRegistrar,看看注册了哪些后置处理器(BeanPostProcessors),打开这个来,看这里

打开这个嵌入式servlet容器定制器的后置处理器(这个单词够长......),打来这个很长的后置处理器,看这个方法

到这里就差不多了,一个很大的循环,和最开始的嵌入式servlet容器定制器链接起来了,哈哈,剖析了清楚了,还是很容易的,而且,上图中我们还可以看看getCustomizers()是怎么获取所有的定制器的,点开这个方法

最后这个是一个简单的方法,就是容器中按照某种类型获取某些组件,然后保存起来,供别的方法遍历,每一个都去执行一个方法,这种模式在springboot中大量的可以看到。


  因为这一节东西比较多,我就总结一下。


  总结全过程:启动springboot应用,创建ioc容器(这个过程我也会找个时间好好说一下ioc容器创建全过程,这里暂时掠过)---------->刷新ioc容器----------->会导入很多的自动配置类,其中就有一个EmbeddedServletContainerAutoConfiguration,这个配置类起作用,又会往ioc容器中导入后置处理器的注册器(BeanPostProcessorsRegistrar)向容器中导入那个很长的后置处理器(EmbeddedServletContainerCustomizerBeanPostProcessor),还会导入tomcat容器工厂(TomcatEmbeddedServletContainerFactory)----------->在这个容器工厂内部就会创建tomcat容器,然后进行一些参数的配置,再包装成嵌入式tomcat,同时我们配置的嵌入式容器定制器(EmbeddedServletContainerCustomizer)加载到ioc容器里,这个时候就会触发那个很长的后置处理器去拿到容器里所有的嵌入式容器定制器,遍历,执行customize方法也为嵌入式tomcat配置一些参数(当然,这些配置是我们写的,优先级更高)---------->tomcat启动


  哎,水平有限只能分析到这里,还是说一句,这里只是粗略的说了一下原理,真实情况下会更加复杂,等我什么时候水平到了,再继续分析吧!


  后面,我会分析分析springboot从启动开始怎么工作,包括ioc容器的创建过程(这个其实属于spring注解版的内容);以及springboot不用嵌入式Tomcat,并支持jsp的做法,这些东西会总结一下。

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程