# 1.为啥要学SpringBoot
这几年在Java面试的时候,Spring全家桶似乎成为了热门的香饽饽。
其中,对SpringBoot框架的连接程度,似乎成为了衡量一个Java程序猿追求技术时尚程度的风向 标。
那么,我们为啥要去学习SpringBoot框架?SpringBoot框架又是个啥?下面我们就来详细了解一 下。
①例数SSM框架整合5大罪状
想必做过SSM框架整合开发的程序猿,对SSM框架整合的复杂程度,应该是记忆犹新的。
在使用传统的SSM框架开发项目时,我们总是要面对如下一些令人头疼的问题:
1.高度模板化而又不可省略的配置文件:
在使用SSM框架整合开发项目的时候,我们一定会手动编写一大堆的配置文件。
这些配置文件的结构大多是相似的,无非就是将整合框架中的各种对象,以bean标签的方式声明 在IOC容器的配置文件当中,然后再对一些常见配置(例如SpringMVC的视图解析器的前后缀等)进行赋值。
但是就是这些高度模板化的配置文件,不仅编写起来数量众多,而且高度模板化,但是在每个项 目当中有必须重新配置一遍,写起来那是相当烦人。
2.茫茫多的jar包引用:
在还没有Maven的年代,做SSM框架整合的时候,我们通常会在lib目录下导入一大堆各种各样的 jar包,用来导入各个框架的功能。
但是这种手动导入jar包的配置方式,不仅存在各个版本jar文件之间的兼容性问题,同时像log4j日 志这种很多框架都需要的jar包,还存在重复导入的风险。
后来,Maven诞生了!Maven的存在虽然大大简化了jar文件依赖的导入方式,但是每次在进行框 架整合的时候,还是要在pom.xml文件中声明一大堆的jar文件依赖。这种时候多一个jar包依赖或者少一个jar包依 赖、某一个jar包依赖的版本有问题,都相当不好进行维护……所以面对茫茫多的jar包引用的依赖声明,程序猿们往往都是如履薄冰。
3.晦涩难懂的配置文件语法格式:
从某种意义上来说,配置文件就是一种强制的语法约束。
在编写一个配置文件的时候,我们只能够按照配置文件中给定的节点定义方式对配置文件进行编 写,一旦出现配置文件约束中没有的节点或者属性,亦或是节点的定义顺序不符合配置文件要求,整 个项目立即报错!
在这个“约定优于配置”编程思想风起云涌的时代里,类似于XML配置文件格式的项目配置方式,真 的显得有些过时。
4.依赖于外部的Web容器:
当一个SSM项目开发完成后,我们通常会将项目打成war包,然后倒入一个Tomcat或者Jetty服务 器当中。
我们将注入Tomcat或者Jetty这样的服务器,统称为Web容器。Web容器虽然为Web项目的运行和 生命周期管理提供了环境,但是每次项目部署都依赖于第三方Web容器的做法,使得项目运行维护的成本相当高昂。 因为,在每一个服务器节点上进行项目部署的时候,我们必须保证其搭载的Web容器的配置是相 同的,这就等同于我们在操心项目本身之外,还要操心服务器的配置问题。尤其是Tomcat在运行SSM框 架整合项目时,那令人尴尬的启动时间, 更是让不少程序猿为之崩溃……
5.单体项目开发的原罪:
我们将通过诸如SSM、SSH框架整合进行开发的项目,称之为单体项目。针对单体项目的开发方 式,我们称之为单体式开发。
在单体项目当中,我们会一股脑将所有功能模块的Java代码、静态页面、配置文件等内容打包到 同一个war包当中,然后在同一个Web容器上进行部署和运行。
但是事实证明,这种单体式开发的项目,往往在功能权衡上是有缺陷的。
例如一个电商网站,交给用户进行操作的客户端部分,可能会承载更高的并发访问量;而执行进 销存业务的管理端,则不会承载这么大的访问压力。
所以在部署项目的时候,我们更希望能够在更多的服务器节点上部署客户端,而对于管理端程 序,我们只要有一两个节点进行部署就足够了。
但是,这对于单体式开发的项目来说,是根本不可能完成的任务。因为毕竟在单体式开发项目当 中,客户端和服务端的代码是绑定在一起的。
②细说SpringBoot框架5大优势
有缺陷才会有需求,有需求就会有进步。
就是因为在生产开发过程中,类似于诸如SSM框架整合的开发模式暴露出了上述的各种缺陷, 才会催生出SpringBoot这样优秀的框架。下面我们就来说明一下,SpringBoot框架的5大优势。 1.SpringBoot项目不需要模板化的配置文件:
之前我们说过,在进行SSM项目整合的过程中,我们会使用到大量模板化的XML配置文件。
这些配置文件不仅晦涩难懂,而且还不能省略。配置文件的编写,消耗了程序猿大量的精力,并 且还不好进行维护。
既然这些配置文件都是高度模板化的,所以在SpringBoot框架当中,对这些模板化的配置文件都 进行了整合。
实际上在SpringBoot框架当中,这些配置文件依然是存在的,只不过:
1.这些配置并非以XML文件的形式存在;
2.这些配置文件中的绝大部分内容都已经被SpringBoot框架写好了,不需要我们手动编辑。
所以,有这样一种方便的框架整合工具,我们何乐而不为呢?
2.SpringBoot使用各种starter整合框架jar包依赖:
在配置一个SpringBoot项目使用的Jar文件依赖的时候,我们不需要再去手动导入茫茫多的依赖声 明,甚至不需要过分关心jar包之间的版本关系,因为SpringBoot已经将这些jar文件的依赖声明, 封装在了各种starter当中。我们只要在pom.xml文件中导入适当的starter依赖声明,就相当于同时 导入了某个框架所需要的依赖的所有jar文件声明。
并且,这些整合的jar文件之间的版本对应关系,都已经在SpringBoot框架当中进行了合适的匹 配,真的是“一句顶一万句”。
3.SpringBoot项目只有一个配置文件,而且不是XML文件:
SpringBoot项目的构件方式与结构虽然简单,但是对于某些自定义的配置选项,SpringBoot依然 为我们留出了手动配置的空间。
但是在默认的SpringBoot项目结构中,只有一个全局配置文件。也就是说,基于SpringBoot框架 的各种框架整合的自定义配置,都可以在这一个配置文件中完成。
并且,这个配置文件的类型不再是语法晦涩难懂的XML配置文件,而是结构相对轻巧的.properties 配置文件或者.yml(.yaml)配置文件格式。
对于.yml(yaml)配置文件的编写方式,我们会在后续进行详细讲解。
现在我们只要知道这种文件形式相比xml配置文件更加好用就行了。
4.项目自带Web容器:
基于SpringBoot的Java Web项目当中,都自带一个经过简化的集成版本Web容器。
这个Web容器可以是Tomcat、Jetty等等常见的Web容器,其选用的容器类型是可以切换的。
并且,不论是基本的Java SE项目,还是通过框架整合的Java Web项目,最终打包的方式都是jar 包方式!
也就是说,我们只要像运行一个可执行的jar文件那样运行一个Java Web项目就可以了,SpringBoot框架中为当前项目集成的Web容器将完成原先第三方Web容器所有的工作,并且,项 目启动时间着实感人!
这样一来,妈妈再也不用担心我的运行环境问题。
5.微服务开发基于SpringBoot框架:
就像之前我们举的例子那样,对于一个电商网站来说,真正应该在多个服务器节点上进行部署 的,只有客户端部分,而管理端的代码,只要在一两个服务器节点上进行部署即可。
基于SpringBoot框架的Java Web项目,完全可以将客户端部分和管理端部分进行分离,分别在两 个不同的项目中进行实现。
并且再加上后期SpringCloud的加持,我们就能完美的实现“按需部署”的操作。
我们将每一个拆分出来的项目部分,都称之为一个微服务节点;而这种开发方式,就是有别于传 统单体式开发的“微服务开发”。
③SpringBoot到底是个啥
通过上面的内容,我们了解了SpringBoot框架的种种优点。
但是貌似我们对SpringBoot框架的概念依然很模糊。
但是从话里话外我们能够发现:SpringBoot框架本身并不是一种新的框架技术。
至少,通过SpringBoot框架实现的Java Web项目,其MVC形式的开发结构依然没有发生改变。
所以从这一点上来讲:SpringBoot只是在传统框架整合开发方式的基础上,对常用的配置进行了 进一步整合,让框架整合的项目开发方式更加简单。
所以如果打一个比方的话就是:
SpringBoot框架就好比一个漏斗,至于漏斗的入口处装入了多少复杂的框架整合配置我们根本无 需关心,我们只要知道漏斗的出口能够为我们提供一个结构简单、使用方便的Java Web项目结构就行了。
而这种简单方便的开发方式,我们称之为敏捷开发。