Spring Boot - 01.对Spring Boot 的认知和基本使用

Spring Boot 在前几年就已经大火了,如今几乎新项目都是以Spring Boot框架搭建的。不过很多人对Spring Boot的了解都是基本使用,也就是在使用层面上非常了解,这种掌握程度其实应付日常的开发足够了,但是一旦碰到不常见的控制台异常信息,或者越来越内卷的面试,就显得知识匮乏了。所以平时还是要抽时间加深对Spring Boot框架的学习,不管是为了面试,还是平常开发过程的疑难杂症的解决,扩展知识的深度还是很有必要的。

这里我先抛出几个问题,以此对Spring Boot有一个新的认识。

Spring Boot框架 与 SSM框架 的区别

这种问题我经常在在一些自媒体文章的评论下看到,比如一篇讲解SSM框架相关技术方面的文章,下面评论中有人问 “小白如何学习Spring框架?”,下面肯定有人会回复 “别学SSM了,SSM都过时了,直接学习Spring Boot吧”。我相信这种场景大家都见到过。

其实我个人是不太认同这种回答的!
在这里插入图片描述

直接学习Spring Boot并不利于新人对Spirng框架的掌握。

如果你单纯的从开发使用角度来看,那SSM和Spring Boot对业务开发者没有太大区别,都是一样的Controller 到 Service 到 dao 这么开发方式,其中所用到的注解不外乎@RestController,@Service,@Autowired等等。

如果你从项目搭建角度来看,那Spring Boot要比SSM简单太多了,几乎是傻瓜式操作。仅需要引一个starter依赖,创建main函数就可以启动了。而SSM就麻烦了,要么创建web.xml,要么使用Spring MVC提供的抽象类 AbstractAnnotationConfigDispatcherServletInitializer ,第二种启动方式,你不看官方文档都不一定知道,太多博客都是以web.xml这种方式创建而传承到下一个阅读博客的人的。。。

基于以上两点我们想想,你想学习Spring,这两种方式哪个比较好?

  • 如果你要系统学习,我建议你选择SSM这种原始方式,你在搭建项目的时候,你会从Servlet入口到Spring的父子容器,到Mybatis的各种配置,其它需要的功能的bean的创建等等,你都会从手到脑过一遍,这些过程即使在Spring Boot里也是无法避免的,仅仅是Spring Boot一些starter对其进行了封装,帮你自动配置了,你感觉不到它的存在。而Spring Boot对其进行的封装是很深又很复杂的,它要对一些功能给框架扩展人员预留很多实现类扩展点,从而让一个核心类变得很复杂,包装了很多层。而这就对新手不太友好了,很容易中途放弃。

  • 如果你只是想快速掌握Spring的开发流程,快速进行业务开发,或者自己搭建demo研究一些第三方组件的使用,那选择Spring Boot无可厚非。Spring Boot当初的目的就是简化项目的搭建过程,不再让开发人员为各种bean的配置头疼,约定大于配置,直接给出你的默认自动配置,入手直接开发。让你直接从0到100;而不是SSM那样 0,1, 2, 3, …, 50, …, 100。

扯远了,回到问题,Spring Boot 和 SSM到底区别在哪里呢?

  1. 首先从入口看,SSM在Servlet3.0前,都是以web.xml为起点,需要外置Tomcat(Tocmat插件)先启动,然后解析web.xml,寻找Servlet。
    Servlet3.0后,不再需要web.xml,它基于SPI机制可以查找ServletContainerInitializer类代替web.xml功能,但是一样还是要外置Tomcat先启动才可以。
    而Spring Boot则是在Tomcat某个版本提供了内置启动方式,也就是使用 new Tomcat()这种方式,这样才得以我们现在看到的main函数启动,将tomcat的创建和启动封装在内部一个时间节点执行。
    所以说Spring Boot的出现是其他技术发展成熟到一定阶段的结果。

  2. 再从中间看,Spring Boot最核心最有亮点的功能-----自动配置。其实Spring Boot的自动配置并不是依赖于其他技术的发展,也就是说就算你用SSM也可以玩一个自动配置功能,自动配置更多的是体现在一种设计理念上。它将常用的一些功能所用到的类提前以JavaConfig方式定义在配置类中,控制好配置类是否可以注册到容器中即可,当然这些说起来容易,做到还是很难的,需要你对底层源码足够的了解。

  3. 最后从项目部署来看,Spring Boot通常以jar包启动,SSM一般要打成war包。其实这点区别也来源于第一点说的,根上还是内置Tomcat提供的好处得以jar包启动。

主要还是上边的1和2吧。其它一些区别,比如说有人面试经常说的Spring Boot直接把配置写在yml里,这东西说到根上还是自动配置的功能。还有的一些诸如Spring Boot不需要再定义各种xml文件,这也是自动配置的功能,哈哈。

Spring 和 Spring Boot 的区别

这个问题经常在一些面试题中见到,很多博客文章也经常以这个问题为主题。

个人观点,Spring Boot 算是Spring的升级版,或者说是套娃版本。Spring Boot最大的特色功能自动配置,底层也是利用了Spring的基础注解@Import。经常说的条件配置注解如@ConditionalOnClass等注解内部也是利用了Spring的@Conditional注解来实现的,可以说没有Spring 的前期铺路,不会有现在Spring Boot这么丰富的功能。你如果对Spring特别了解后,后续学习Spring Boot就会非常简单,随便一个功能注解都是Spring的注解或者扩展点来实现的。(内嵌Tomcat,使用main函数启动,这不算Spring Boot专属特有功能,你自己将来也可以new Tomcat(),对Tomcat进行优化,再结合Spring Framework的扩展点,针对你们公司的业务,做一个定制化,你给它起个高大上的框架名字也可以)

所以万一什么时候市场上再出来个Spring A,B,C,D框架,也不用慌,它离不开Spring框架那一套。

所以说想要学习Spring Boot,想要了解它底层机制,就需要对Spring Framework了解的越深越好。

搭建Spring Boot工程

这一块其实没啥好说的,网上有太多教程了。
我写这篇博客时,Spring Boot已经推出了Spring Boot 2.5版本 GA版本,对应的Spring 版本时 5.3.7。

在这里插入图片描述
我用IDEA自带的Spring Initializr默认创建的就是2.5版本的Spring Boot工程。
在这里插入图片描述
选择JDK版本为 JDK8。
在这里插入图片描述
依赖选择,仅选择了Web功能,直接下一步。
在这里插入图片描述
继续下一步,就创建完了。这过程确实很简单。。。。。
最终项目结构如下,依赖自动帮我们选择 spring-boot-starter-web 这个starter依赖。

在这里插入图片描述
这时候,就可以直接Main启动一个Web项目了,相比于SSM那一套简直不要太简单。

在这里插入图片描述
看log可以知道,默认端口号 8080。如果有需要,你就可以随时写Controller了。如果需要其他依赖,在Pom文件里引入即可。

好,Spring Boot的简单介绍到这里就结束。不过提前说明一点,这里搭建的demo用的版本时Spring Boot 2.5。后期编译源码,学习源码我用的时Spring Boot 2.2.8版本。因为从2.3版本开始,Spring Boot 官方的源码就是默认以Gradle构建,我实在懒得学习Gradle了,项目管理用Maven用习惯了。所以后期的博客就是以Spring Boot 2.2.8版本为主。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值