美文网首页
Spring、SpringBoot、SpringCloud还是傻

Spring、SpringBoot、SpringCloud还是傻

作者: 程就人生 | 来源:发表于2020-06-26 18:04 被阅读0次

    去年,花了几十元买了个SpringMVC+Spring+Mybatis的课程,顺便发到了朋友圈里,这时有个前同事评论,现在都什么年代了,还学Spring框架,Spring早就过时了,现今流行SpringBoot和SpringCloud的!

    看到他的评论,没有说什么。按照以往的说话风格,会以疑问句的方式反问他,你确定真的过时了?那么SpringBoot和SpringCloud又是从何而来?

    在15年的时候,开始接触SSH(Spring、Struct、Hibernate)框架,在18年的时候开始使用SpringBoot、SpringCloud,SpringMVC框架直接忽略掉了;特别是这几年间,一直忙于编码,拷贝别人的编码,很少去研究原理性的东西。

    直到面试一家新公司,才发现自己所知甚少,一问三不知。拷贝别人的代码是很容易,怎么就不能多看看源码,多深入思考一下呢?知道怎么做,却不知道为什么这么做,徒有那么多年的开发经验。

    想要深入理解原理,在实施拿来主义的前提下,还是要抽出一些时间去研究一下背后的原理的,不然真的枉对这么多年的经验。

    针对Spring面试时的题目,大抵都是那么几个,核心理念,核心理念的理解和应用,再具体点,到底怎么用。从抽象到具体,从概念到应用,从架构到具体的实现细节。

    Spring、SpringBoot、SpringCloud的,既然都带有Spring的字样,那么中间必然有这样那样千丝万缕的联系,在面试时,能把这中间的关系说清楚吗?更有甚者,是要画原理图的。

    为了加深记忆,Spring的发展史也不要错过:

    2002年,一位澳大利亚的工程师,一位音乐博士发布了一本著作,并在著作中首次提出了Spring框架的核心理念。
    2003年发布了0.X版本,在2004该博士又主导发布了1.0版本,1.0版本只能支持XML文件形式,还不能支持注解。
    随着JDK5的发布,增加了注解的特性;2007年,与之相对应的Spring2.0也开始支持注解,这时只能支持少量的注解,比如@Component、@Service等;
    2009年12月,Spring3.0发布,引入了更多的注解功能。
    2013年12月,Spring4.0发布,注解功能越来越强大,可以完全脱离XML文件;
    2014年,SpringBoot诞生。
    2017年的时候,Spring5.X发布,可以有效地支持Java 9的开发。
    2018年3月,SpringBoot推出2.0.0版本。

    Spring框架的核心理念,IoC控制反转、依赖注入和AOP;SpringBoot的诞生又是如何,和Spring框架有关系吗?

    答案是肯定的,SpringBoot的诞生是为了简化Spring开发、部署和测试的;传统的Spring开发,需要打包成一个War包,发布到Tomcat等容器里,启动Tomcat等容器后,才能运行项目。

    SpringBoot提供一个starter, 创建一个独立的Spring应用程序,内嵌Tomcat等容器,无需部署WAR包,允许使用maven来根据需要获取starter;默认的自动配置;对xml没有硬性要求配置。

    SpringBoot是基于Spring框架搭建起来的应用,所以说怎么能离开Spring框架呢?又怎么能和Spring脱离干系呢?

    在单独使用Spring框架搭建项目的时候,在使用SSH框架的时候,本地是需要下载一个Tomcat容器来运行项目的,SpringBoot则把Tomcat容器内置在项目里面了,也就无需配置运行的容器了。

    在使用架包上,也方便了不少,只需要在pom文件中引入,使用maven即可下载到本地仓库,根本就不需要一个架包一个架包下载下来。

    SpringBoot的核心思想是,约定优于配置。好好地回忆一下,在使用SpringBoot创建新项目的时候,基本上都使用过默认的配置。复杂的配置,再去覆盖框架里默认的配置。

    不要小看SpringBoot的这个starter,在pom文件中,点进starter去看时,它把开发一个功能所需的架构都引入了进来。在搭建项目的时候,只需要很少量的代码就可以将项目运行起来。

    对于习惯了配置传统项目的人来说,这不知方便了多少。对于一个新手,更是降低了搭建项目的技术门槛。

    SpringBoot的版本号是使用数字表示的,每个版本后又标有红绿蓝黑背景的字样,它们是有一定含义的。

    SpringBoot的版本

    Spring Boot 2.2.5.RELEASE的含义是:主版本.次版本.增量版本(Bug修复);
    版本后的备注如下:

    版本备注 详细说明
    Alpha 不建议使用,主要是以实现软件功能为主,通常只在软件开发者内部交流,Bug较多
    Beta 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除
    GA General Availability,正式版本,官方推荐使用此版本,在国外都是用GA来说明release版本
    M 又叫里程碑版本,表示该版本较之前版本有功能上的重大更新
    PRE(不建议使用) 预览版,内部测试版,主要是给开发人员和测试人员测试和找BUG用的
    Release 最终版本,Release不会以单词形式出现在软件封面上,取而代之的是符号(R)
    RC 该版本已经相当成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差无几
    SNAPSHOT 快照版,可以稳定使用,且仍在继续改进版本

    SpringCloud是基于SpringBoot实现的微服务架构开发组件,SpringCloud也需要对应SpringBoot的版本,不然会遇到各种各样的奇怪错误。

    SpringCloud是一个项目概况,其下又包括很多子项目,采用伦敦地铁站的英文名字来命名,以A-Z字母顺序表的方式发布。

    SpringCloud下的子项目

    所以在使用SpringCloud子项目的时候,一定要和SpringBoot的版本对应上:

    Release Train Boot Version
    Hoxton 2.2.x
    Greenwich 2.1.x
    Finchley 2.0.x
    Edgware 1.5.x
    Dalston 1.5.x

    通过本文的整理,我已经能够把Spring、SpringBoot和SpringCloud三者之间的关系搞明白,相信屏目前聪明的你也看明白了。

    了解它们三者之间的关系还是第一步,在面试的时候,仅仅知道他们三者之间的关系还是不够的。苛刻的面试官们,会一步一步的深入,一点一点地考察,看看你对它们的理解到了什么程度。

    说一说Spring的核心理念,什么是IoC控制反转,什么是AOP,它们都应用在哪里?又比如说RestFul设计规范是什么,如何使用的,你们的接口平时又是如何命名的?

    还比如说SpringCloud下又有很多的组件,每个组件的原理是什么,如何使用的。随便摸出来一个,就像一颗定时炸弹一样,随时等待着被揭穿。

    有对比才有差异,当你对几个概念都感觉模棱两可时,不妨把它们都拿出来,摆在桌面上,对比一番,这样就可以知道它们之间的联系与区别了。

    喝水不忘打井人,参考资料:
    https://www.cnblogs.com/chsoul/p/12545137.html
    https://spring.io/projects/spring-cloud#learn
    https://spring.io/projects/spring-boot#learn

    相关文章

      网友评论

          本文标题:Spring、SpringBoot、SpringCloud还是傻

          本文链接:https://www.haomeiwen.com/subject/njfufktx.html