你看不懂的spring原理是因为不知道这几个概念
背景
问题从一杯咖啡开始。
今天我去楼下咖啡机买了一杯「粉黛拿铁」。制作过程中显示:

我取了做好的粉黛拿铁,喝了一口,果然就是一杯热巧克力。咦咦咦,说好的拿铁呢?虽然我对「零点吧」的咖啡评价很高,觉得味道不亚于星爸爸。但是不可否认它确实给了我一杯假的拿铁。
现在很多技术专家好比品鉴咖啡的专家。他们并不需要知道咖啡豆和可可豆的区别,更不知道这两种植物长在树上是什么样子。没关系,这并不影响他们区别一杯咖啡是拿铁、摩卡还是卡布奇诺。就好像工作中遇到团队配合的情况,他们并不需要知道别人团队的产品是怎么实现的,只需要在他们出问题的时候让他们帮忙解决。所以,现在很多工作招高级别的人都要求良好的沟通和推动能力。技术能力反而考察的没有那么细致。
但是作为技术人员,了解底层是很重要的。因为我们不是买咖啡的,而是生产咖啡机的。有一天,咖啡机不工作了,经过分析监控报警和日志大数据,终于找到原因:一粒咖啡豆太小卡到了凹槽里。清理了这粒咖啡豆,咖啡机又正常工作了。这就结束了吗?
不,我们要复盘,用5Why分析法找到问题的根因。
Q:为什么咖啡机会不工作?
A:因为一粒咖啡豆卡在里凹槽里。
Q:为什么会卡在凹槽里?
A:因为这粒咖啡豆太小了,就掉下去了。
Q:为什么太小了就会掉下去?
A:因为咖啡豆基本都是圆形,咖啡豆之间有很大的空隙,彼此没有压力。只是受到重力影响,就掉下去了。
Q:为什么咖啡豆都是圆形,不能生产出方形,彼此紧密契合的咖啡豆吗?
这时候就是后悔不知道咖啡豆到底长在哪种树上的时间了。不了解所以没有办法做出合理的改变。
现在我们都喜欢用SpringBoot。平时工作的好好的,突然公司要求做一个基础组件的升级,咦咦咦,本地运行的好好的。发布到服务器上跑不起来。当初搭建开发基础框架的小哥早已离职,是看着那堆日志发愣呢?还是了解一下里面的基础概念顺藤摸瓜呢?废话到此为止。
概念
SpringBoot是什么?
SpringBoot是一个框架和编程规范。它化简了很多个框架和组件的使用,一站式简单的完成文件配置和应用部署。因为它内置服务器并装备启动类代码,可以快速开启一个Web容器。
Web容器是什么?
Web容器是一种可以处理从客户端发出请求的应用程序。在服务器中一个端口就对应一个提供相应服务的程序。在Java方面,web任凭器一般是指Servlet容器。
Servlet是什么?
Servlet只是一个接口。它声明了Servlet的生命周期的三个基本方法:init()、service()和destroy()。Web容器会在特定时间调用这些方法。Servlet是提供了一个标准,是J2EE的13个标准接口规范之一。
J2EE是什么?
J2EE(Java 2 Platfrom, Enterprise Edition)最初是一个为大企业主机级的计算类似而设计的Java平台。这个标准给提供可重用模块组件组件提供了土壤。就是定义一系列的接口,你们要实现什么功能都要在这些接口基础上。根据场景Java2平台主要包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本。
Java2平台是什么?
Sun公司在1998年发表JDK1.2版本的时候,使用了新名字Java 2 Platform。修改后的JDK成为Java 2 Platfrom Software Developing Kit 即J2SDK。
Web容器和Netty的关系
Web容器(如tomcat、jetty)主要处理从客户端传过来的消息,将消息分给worker线程来处理。worker线程做的事情就是通过Servlet来做的。而接受消息线程和worker线程之间的协调沟通工作目前主流是Netty来做的。
一张图大体表示一下他们的关系:

总结
如果做一件事情很麻烦,那一定有一个好方法。
相关阅读
架构视角 - DDD、TDD、MDD领域驱动、测试驱动还是模型驱动?
你看不懂的spring原理是因为不知道这几个概念的更多相关文章
- 跟vczh看实例学编译原理——一:Tinymoe的设计哲学
自从<序>胡扯了快一个月之后,终于迎来了正片.之所以系列文章叫<看实例学编译原理>,是因为整个系列会通过带大家一步一步实现Tinymoe的过程,来介绍编译原理的一些知识点. 但 ...
- 如何写出同事看不懂的Java代码?
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是没更新就是在家忙着带娃的Hydra. 前几天,正巧赶上组里代码review,一下午下来,感觉整个人都血压拉满了.五花八门的代码 ...
- 跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析
文章中引用的代码均来自https://github.com/vczh/tinymoe. 看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了.在正确分析"print ...
- 小师妹学JVM之:深入理解JIT和编译优化-你看不懂系列
目录 简介 JIT编译器 Tiered Compilation分层编译 OSR(On-Stack Replacement) Deoptimization 常见的编译优化举例 Inlining内联 Br ...
- 我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
业务背景 首先,业务需求是这样的,从第三方电商平台拉取所有订单,然后保存到公司自己的数据库,需要判断是否有物流信息,如果有物流信息,还需要再进行上传. 而第三方接口返回的数据是 JSON 格式的,其中 ...
- 探究Spring原理
探究Spring原理 探究IoC原理 首先我们大致了解一下ApplicationContext的加载流程: 我们可以看到,整个过程极为复杂,一句话肯定是无法解释的,所以我们就从ApplicationC ...
- 跟vczh看实例学编译原理——二:实现Tinymoe的词法分析
文章中引用的代码均来自https://github.com/vczh/tinymoe. 实现Tinymoe的第一步自然是一个词法分析器.词法分析其所作的事情很简单,就是把一份代码分割成若干个tok ...
- 跟vczh看实例学编译原理——零:序言
在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...
- spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包
下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...
随机推荐
- Visual Studio 2019使用码云设置过滤忽略的文件或文件夹(ignore file)
Visual Studio 2019使用码云的时候,会遇到 “Git failed with a fatal error.error: open(".vs/{{项目名称}}/Server/s ...
- ImportError: No module named flask 导包失败,Python3重新安装Flask模块
在部署环境过程中,通过pip install -r requirements.txt安装包,结果启动项目时总是报错,显示没有flask模块,通过pip install flask还是不行,于是下载fl ...
- docker alphine 安装vim 等软件
alphine 不带 yum,所以只能用apt-get 安装 apt-get update apt-get install vim apt-get install net-tools
- Sublime Merge真正的Git客户端
Sublime Merge好用吗?借助功能强大的跨平台UI工具包,无与伦比的语法高亮引擎和自定义高性能Git读取库,Sublime Merge为性能设定了标准.所有内容都是可扩展的.键绑定,菜单,主题 ...
- VS2019 开发Django(三)------连接MySQL
导航:VS2019开发Django系列 下班回到家,洗漱完毕,夜已深.关于Django这个系列的博文,我心中的想法就是承接之前的微信小程序的内容,做一个服务端的管理中心,上新菜单,调整价格啊!之类的, ...
- Android组件体系之Activity启动模式解析
本文主要分析Activity的启动模式及使用场景. 一.Activity启动模式浅析 1.standard 标准模式,系统默认的启动模式.在启动Activity时,系统总是创建一个新的Activity ...
- Linux中获取本机的最新IPv6地址_更新ddns的脚本
Linux中获取本机的最新IPv6地址_更新ddns的脚本 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-07. 运营商提供ipv6地址. 路由器后有台linux机器,通过e ...
- http请求报400错误的原因分析
在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型 ...
- swift为什么不是do while?
swift为什么不是do while do while已经深入人心之后,对repeat while的语义逻辑该如何接受呢? do while的语义逻辑是:这个whilte循环先执行一次.逻辑目标针对w ...
- Android五大布局详解——FrameLayout(帧布局)
FrameLayout 这个布局相对前面两节介绍的布局就简单了很多,因此它的应用场景也就特别的少.这种布局没有方便的定位方式,所有的控件都会默认摆放在布局的左上角.新建UILayoutTestThre ...