2021 SpringBoot历史最详细图文教学(一)

心心相印 → 印贼作父 → 父相伤害 → 害想咋滴
一篇文章让你0基础精通SpringBoot,害想咋滴?(白嫖有罪,记得点赞)
SpringBoot由于学习的内容比较多,我会分成多个章节来写。

不详细记得叫人打我
不详细一定要叫人打我
不详细千万记得叫人打我
在这里插入图片描述


一、Spring Boot入门

1.1、SpringBoot简介

Spring Framework
  Spring Framework是轻量级的框架。无需开发重量级的 EnterpriseJavaBean(EJB),通过依赖注入和面向切面编程,用简单的Java 对象实现了 EJB 的功能。

缺点:

  1. 虽然 Spring 的组件代码是轻量级的,但繁琐文件配置却是重量级的
  2. jar包版本依赖管理复杂,依赖冲突问题往往是生产线上的杀手
  3. 如需要引用第三方库,需要经过导包、配置、开发、测试、配置服务环境等复杂的上线流程,第三方集成难度很大。

Spring boot
  SpringBoot简化了J2EE应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用。其设计目的也是用来简化新 Spring 应用的初始搭建以及开发过程。
  Spring Boot 不是Spring 的替代者,Spring 框架是通过 IOC 机制来管理 Bean 的。Spring Boot 依赖 Spring 框架来管理对象的依赖。Spring Boot 并不是Spring 的精简版本,而是为使用 Spring 做好各种产品级准备

  Spring Boot 不是Spring 的替代者,而是Spring框架进行了再封装。
在这里插入图片描述
  spring boot 其实不是什么新的框架,如果说 maven 是jar包管理工具,那么spring boot 系列技术站整合工具,spring boot 中不仅整合了Spring家族的其他技术服务,还允许接入其他技术框架。
  spring boot 也是Spring家族中的一员,不同的是Spring boot更像一个多插孔,多规格的插板,底层不仅使用了Spring其他应用的技术站,还可以接入其他框架或工具。插板在手,天下你有。
在这里插入图片描述

优点:

  1. 快速创建独立运行的Spring项目以及与主流框架集成
  2. 使用嵌入式的Servlet容器,应用无需打成war包并部署到Tomcat。
    (可直接打成jar照样运行)
  3. starters自动依赖与版本控制
  4. 无冗余代码生成和XML 强制配置,遵循“约定大于配置”
  5. 集成大量第三种库配置(包括云计算),无须配置XML,开箱即用
  6. 提供一系列大型项目常用的非功能性特征,如嵌入式服务器、安全性、度量、运行状况检查、外部化配置等。

缺点:
  想要用SpringBoot进行企业级产品的应用进行深度定制,对掌握Spring框架要求相对较高。


1.2、微服务

:什么是微服务?(熟悉的同学可以直接跳过)

简单举例:看军事新闻的同学应该都知道,一艘航空母舰作战能力虽然很强,但是弱点太明显,就是防御能力太差,单艘的航空母舰很少单独行动,通常航空母舰战斗群才是主要军事力量,你可以把单艘航母理解为的单体应用(防御差,机动性不好),把航母战斗群(调度复杂,维护费用高)理解为微服务。

大部分的开发者经历和开发过单体应用,无论是传统的 Servlet + JSP,还是 SSM,还是现在的 SpringBoot,它们都是单体应用,那么长期陪伴我们的单体应用有什么弊端?我们是面临了什么问题,导致我们要抛弃单体应用转向微服务架构?个人总结主要问题如下:

  • 部署成本高(无论是修改1行代码,还是10行代码,都要全量替换,重新打包,部署,运行)

  • 改动影响大,风险高(不论代码改动多小,成本都相同,风险也相同)

  • 因为成本高,风险高,所以导致部署频率低(无法快速交付客户需求)

当然还有例如无法满足快速扩容,弹性伸缩,无法适应云环境特性等问题,但我们不一一详谈了,以上的问题,都是微服务架构要解决的问题
在这里插入图片描述

推荐文章:三种架构的区别

  单体架构实际上就是将前端页面,所有模块功能的代码都放在一个应用里面,进行应用部署。开发、测试,以及应用的部署都非常简单。如果服务器负载比较大,可以将单体应用复制放到多个服务器上,从而实现均衡负载。缺点是只修改到代码,就需要整个代码重新打包,部署,维护起来比较麻烦。
  
  微服务实际上是一种架构风格,一个应用应该是一族小型的服务器:微服务则集成了各种功能服务于一体,且提倡服务与服务之间相互独立,可独立升级,可替换,不影响其他服务的一个服务群体。其中服务与服务之间的互相调用可以通过HTTP的方式进行互通

微服务架构的特点:

  1. 针对特定服务发布,影响小,风险小,成本低
  2. 频繁发布版本,快速交付需求
  3. 低成本扩容,弹性伸缩,适应云环境

微服务由于是服务集群组成的一个大型分布式服务网,确实提高了应用的开发效率和安全性,降低了开发成本,但是也给维护和测试人员带来的一定的难度:

  1. 分布式系统的复杂性
  2. 部署,测试和监控的成本问题
  3. 分布式事务和CAP的相关问题

那如何比较和的解决微服务产生的问题呢?Spring公司已为我们提供了一整套的解决方案:
在这里插入图片描述

详细参阅:https://www.cnblogs.com/xiao2shiqi/p/11298663.html


1.3、Spring Boot入门案例

必须掌握以下内容:

  • Spring框架使用经验
  • 熟练使用Maven进行项目构建和依赖管理
  • 熟练使用Eclipse或者IDEA

环境约束

  • jdk1.8
  • maven3.6.3
  • IntellJ IDEA 2020.01.03
  • Spring Boot 2.2.7.RELEASE (SpringBoot2 )

案例演示

案例需求
  浏览器发送hello请求,服务器接收请求并处理,响应Hello World字符串

1、创建普通Maven工程(不使用骨架)
在这里插入图片描述

2、指定Maven环境和JDK编译环境
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、导入Spring Boot版本依赖
作为一个springboot项目必须要加上以下依赖,这是Spring Boot的父级依赖,这样当前的项目就是个Spring Boot项目了。

  spring-boot-starter-parent 是一个特殊的starter,它用来提供相关的Maven默认依赖。使用它之后,常用的包依赖可以省去version标签。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

spring-boot-starter-parent里面提供了一个spring-boot-dependencies依赖,在此依赖中定义了常用的所有的依赖的版本号,因此不需要定义version,就可以添加兼容的版本依赖。
在这里插入图片描述

4、编写一个主程序类:启动Spring Boot应用
在这里插入图片描述
Run方法中需要传入两个参数,其中一个参数是类,传入的该类必输是被@SpringBootApplication标注的类

5、编写相关的Controller
在这里插入图片描述

6、启动Spring Boot主程序
为什么可以执行,因为SpringBoot中集成了Tomcat服务器
在这里插入图片描述

7、打开浏览器,测试:
在这里插入图片描述

8、简化部署
将Spring-boot的maven插件导入到pom文件里面。
该插件的作用是可以将应用打包成一个可执行的jar包:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

在这里插入图片描述

然后使用Maven工具中package命令进行打包:
在这里插入图片描述
在这里插入图片描述
将jar复制到指定目录,并运行jar包:
在这里插入图片描述
再次进行测试访问,发现也能访问成功:
在这里插入图片描述

此时我们打开该jar包看一下:
在这里插入图片描述


1.4、探究入门案例

1、Spring boot父项目
以为的应用,父项目一般是用来管理jar包的。
在这里插入图片描述

按住Ctrl 键 + 鼠标左键,进入spring-boot-starter-parent,发现该父项目依赖于一个叫
spring-boot-dependencies的父项目,如图:
在这里插入图片描述
当我们再点击进入查看的时候,发现我们常用的jar包版本依赖都存储在里面:
在这里插入图片描述

  原来SpringBoot就在这里帮助我们来管理版本,所以说这个就是spring boot的版本仲裁中心。后期如果你想要使用某个jar的其他版本可以在这里进行管理。当然,如果是没有在仲裁中心的依赖自然需要声明版本号。
  在版本仲裁中心下面,又依赖了多个类型启动器,如图:在这里插入图片描述
至于启动器下面会做介绍。


2、spring-boot-starter-web依赖
在pom文件中除了spring-boot-starter-parent的依赖,还有一个spring-boot-starter-web
的依赖:
在这里插入图片描述
该依赖也是没有写版本号,其中在spring-boot-starter-web中可以拆分为:
spring-boot-starter
   spring-boot 场景启动器:帮我们导入了web模块正常运行所依赖的组件,
这些依赖的版本号都是由父项目的仲裁中心进行统一管理。
可以点击spring-boot-starter-web进去查看web模块依赖的组件
在这里插入图片描述
在Spring-boot中,也有更多类似的启动器,每一个starter都是一系列依赖描述的组合,spring boot将所有的功能场景都抽取出来,做成了一个个的starter(启动器),例如:
在这里插入图片描述
只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能,就导入什么场景启动器即可。所以后面会听到“启动器”这个词比“依赖”这个词还要多。

下面常用的应用程序starters是Spring Boot在 org.springframework.boot 组下提供的:

  1. spring-boot-starter
    核心Spring Boot starter,包括自动配置支持,日志和YAML

  2. spring-boot-starter-actuator
    生产准备的特性,用于帮你监控和管理应用

  3. spring-boot-starter-amqp
    对"高级消息队列协议"的支持,通过 spring-rabbit 实现

  4. spring-boot-starter-aop
    对面向切面编程的支持,包括 spring-aop 和AspectJ

  5. spring-boot-starter-mail
    对 javax.mail 的支持

  6. spring-boot-starter-mobile
    对 spring-mobile 的支持

  7. spring-boot-starter-redis
    对REDIS键值数据存储的支持,包括 spring-redis

  8. spring-boot-starter-security
    对 spring-security 的支持

  9. spring-boot-starter-test
    对常用测试依赖的支持,包括JUnit, Hamcrest和Mockito,还有 spring-test 模块

  10. spring-boot-starter-thymeleaf
    对Thymeleaf模板引擎的支持,包括和Spring的集成

  11. spring-boot-starter-web
    对全栈web开发的支持,包括Tomcat和 spring-webmvc

  12. spring-boot-starter-websocket
    对WebSocket开发的支持

  13. spring-boot-starter-remote-shell
    添加远程 ssh shell支持

  14. spring-boot-starter-jetty
    导入Jetty HTTP引擎(作为Tomcat的替代)

  15. spring-boot-starter-log4j
    对Log4J日志系统的支持

  16. spring-boot-starter-logging
    导入Spring Boot的默认日志系统(Logback)

  17. spring-boot-starter-tomcat
    导入Spring Boot的默认HTTP引擎(Tomcat)


3、主程序类(主入口类)
在这里插入图片描述
@SpringBootApplication :Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,也是SpringBoot程序的入口。SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。
点击@SpringBootApplication注解进行查看,发现该注解是一个组合注解,该注解里面有很多注解组成:
在这里插入图片描述

注解1
@SpringBootConfiguration:标志在某个类上,表示这是一个Spring boot的配置类。点击查看该注解,发现该注解又是由几个注解组合而成:
在这里插入图片描述
其中@SpringBootConfiguration注解和@Configuration注解都是代表该类是一个配置类,
只是@Configuration注解是Spring提供
而@SpringBootConfiguration是spring boot来提供的。

注解2
@EnableAutoConfiguration:开启自动配置功能。
告诉Spring boot开启自动配置功能。
该注解都代替了Spring中的自动扫描包等配置,是由Spring boot 帮我们自动配置的。
点击鼠标进去查看该组合注解:
在这里插入图片描述
@AutoConfigurationPackage注解下的子注解@Import({AutoConfigurationImportSelector.class})的作用是扫描主程序类所在包以及其子包里面的的@Controller、@Controller、@Service等容器注解,然后将该类的bean注入到Spring容器中。同时,AutoConfigurationImportSelector类中的selectImports(AnnotationMetadata annotationMetadata)方法就是获取组件,然后组件以全类名的方式返回,这些组件就会被添加到容器中,会给容器中导入很多的自动配置类,这些自动配置类的作用,就是给容器中导入这个场景所需要的所有组件,并配置好这些组件。比如我们需要用到MongoDB的功能,那么MongoDB的自动配置类和相应的组件一 一配置好,并添加到容器,然后就可以直接调用bean对象。
  有了自动配置类,就免去了我们手动编写配置以及注入功能组件等工作。这就是Spring boot几乎零配置的原理。

实际上,Spring boot在启动的时候,@EnableAutoConfiguration注解会从类路径下的MATA-INF/spring.factories中获取EnableAutoConfiguration指定的值。将这些值作为自动配置类导入到容器中,此时自动配置类就生效了,此时就自动帮我们进行自动配置功能,就不需要写那么多的配置文件和代码了。
在这里插入图片描述
我们可以在里面选择一个自动配置点,然后按Ctrl + 鼠标左键 点击进去进行查看,发现里面的类都使用配置类的方法进行了自动配置,替代了Sprng传统的xml配置。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值