SpringBoot2核心技术(一)了解自动配置原理
首页 专栏 java 文章详情
0

SpringBoot2核心技术(一)了解自动配置原理

傻梦兽 发布于 3 月 8 日
本教程将以SpringBoot 2.3/2.4 进行讲解。

学习要求

本系列的是对SpringBoot进行讲解,所以需要对Spring有一定的基础,SpringBoot翻译可以理解为Spring框架脚手架。既然是脚手架,学过前端的同学也知道脚手架依赖很多依赖包,所以这里也需要对Maven有熟悉的使用。
说白了就两点

熟悉Spring基础 熟悉Maven使用

使用的环境是

Java8及以上 Maven 3.3及以上:https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-system-requirements

PS: 如果使用到JDK9以上的话,需要自己在Maven引入JDK8 缺乏的maven包,这个可以自己百度一下,网上有很多相关的内容

SpringBoot的由来

开头我已经讲过SpringBoot是Spring的一个脚手架,那么Spring框架可以用来做什么?
在Spring的官网有说明,可以做以下功能

做个Spring MVC开发的老JAVA们都知道,你要写一个JAVA程序,你需要写很多的JAVA配置,就算你用Spring框架,也逃离这个噩梦。很多老JAVA都是写完一个配置后,封装好之后,又把这些文件考到另一个项目中使用。所以你看到老程序员们,都有一个自己的代码库。可是用来SpringBoot之后。我们最大的解封就是无需配置了,SpringBoot帮我们自带配置,也不用像以前的JAVA程序开发完后,打包成war包再部署到Tomcat。

Create stand-alone Spring applications 创建独立Spring应用 Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files) 内嵌web服务器 Provide opinionated 'starter' dependencies to simplify your build configuration 自动starter依赖,简化构建配置 Automatically configure Spring and 3rd party libraries whenever possible 自动配置Spring以及第三方功能 Provide production-ready features such as metrics, health checks, and externalized configuration 提供生产级别的监控、健康检查及外部化配置 Absolutely no code generation and no requirement for XML configuration 无代码生成、无需编写XML
SpringBoot是整合Spring技术栈的一站式框架

SpringBoot是简化Spring技术栈的快速开发脚手架

这是SpringBoot的优点,不过同时也有一定的缺点

人称版本帝,迭代快,需要时刻关注变化 封装太深,内部原理复杂,不容易精通

SpringBoot是的一个上手容易,深入难的东西。因为Spring框架本来就是一个很庞大的框架。可以介入到个个领域。

微服务

随着时代的发展,微服务风口也越来越普及。那什么是微服务呢,我总结了几个点。

微服务是一种架构风格 一个应用拆分为一组小型服务 每个服务运行在自己的进程内,也就是可独立部署和升级 服务之间使用轻量级HTTP交互 服务围绕业务功能拆分 可以由全自动部署机制独立部署 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术

这么多个服务要部署,如果没有一个类似的SpringBoot的脚手架来快速帮我们构建项目,感觉是一件非常痛苦的事情,你想想光写配置,你都不知道要维护多久。

所以说SpringBoot只有好处,没有什么坏处。

了解自动配置原理

依赖管理
依赖管理这个是我们的项目pom.xml编写的  
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
</parent>

spring-boot-starter-parent的工程又依赖了spring-boot-dependencies
 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
  </parent>

spring-boot-dependencies几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制。

开发导入starter场景启动器
1、见到很多 spring-boot-starter-* : *就某种场景 
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入 
3、SpringBoot所有支持的场景 
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter 
4、见到的  *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。 
5、所有场景启动器最底层的依赖 
<dependency>  
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId>
    <version>2.3.4.RELEASE</version> 
    <scope>compile</scope>
</dependency>

无需关注版本号,自动版本仲裁

1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本号。

可以修改默认版本号

1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
2、在当前项目里面重写配置在properties节点下修改版本号

<properties> 
    <mysql.version>5.1.43</mysql.version>
</properties>

自动配置

自动配好Tomcat 引入Tomcat依赖。 配置Tomcat
<dependency>  
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <version>2.3.4.RELEASE</version> 
    <scope>compile</scope> 
</dependency>

自动配好SpringMVC

引入SpringMVC全套组件 自动配好SpringMVC常用组件(功能)

自动配好Web常见功能,如:字符编码问题

SpringBoot帮我们配置好了所有web开发的常见场景

默认的包结构

主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,这就是为什么SpringBoot需要把逻辑代码放在一个包下载编写的一个原因。 无需以前的包扫描配置 想要改变扫描路径,@SpringBootApplication(scanBasePackages= "com.atguigu") 或者@ComponentScan 指定扫描路径
@SpringBootApplication 
等同于 
@SpringBootConfiguration 
@EnableAutoConfiguration 
@ComponentScan("com.atguigu.boot")

面试题问得最多的地方也是在这里,我们这里要答的话,最好把以上四个注解都一起回答

java springboot
阅读 24 发布于 3 月 8 日
收藏
分享
本作品系原创, 采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
avatar
傻梦兽
1 声望
0 粉丝
关注作者
0 条评论
得票 时间
提交评论
avatar
傻梦兽
1 声望
0 粉丝
关注作者
宣传栏
目录
本教程将以SpringBoot 2.3/2.4 进行讲解。

学习要求

本系列的是对SpringBoot进行讲解,所以需要对Spring有一定的基础,SpringBoot翻译可以理解为Spring框架脚手架。既然是脚手架,学过前端的同学也知道脚手架依赖很多依赖包,所以这里也需要对Maven有熟悉的使用。
说白了就两点

熟悉Spring基础 熟悉Maven使用

使用的环境是

Java8及以上 Maven 3.3及以上:https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-system-requirements

PS: 如果使用到JDK9以上的话,需要自己在Maven引入JDK8 缺乏的maven包,这个可以自己百度一下,网上有很多相关的内容

SpringBoot的由来

开头我已经讲过SpringBoot是Spring的一个脚手架,那么Spring框架可以用来做什么?
在Spring的官网有说明,可以做以下功能

做个Spring MVC开发的老JAVA们都知道,你要写一个JAVA程序,你需要写很多的JAVA配置,就算你用Spring框架,也逃离这个噩梦。很多老JAVA都是写完一个配置后,封装好之后,又把这些文件考到另一个项目中使用。所以你看到老程序员们,都有一个自己的代码库。可是用来SpringBoot之后。我们最大的解封就是无需配置了,SpringBoot帮我们自带配置,也不用像以前的JAVA程序开发完后,打包成war包再部署到Tomcat。

Create stand-alone Spring applications 创建独立Spring应用 Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files) 内嵌web服务器 Provide opinionated 'starter' dependencies to simplify your build configuration 自动starter依赖,简化构建配置 Automatically configure Spring and 3rd party libraries whenever possible 自动配置Spring以及第三方功能 Provide production-ready features such as metrics, health checks, and externalized configuration 提供生产级别的监控、健康检查及外部化配置 Absolutely no code generation and no requirement for XML configuration 无代码生成、无需编写XML
SpringBoot是整合Spring技术栈的一站式框架

SpringBoot是简化Spring技术栈的快速开发脚手架

这是SpringBoot的优点,不过同时也有一定的缺点

人称版本帝,迭代快,需要时刻关注变化 封装太深,内部原理复杂,不容易精通

SpringBoot是的一个上手容易,深入难的东西。因为Spring框架本来就是一个很庞大的框架。可以介入到个个领域。

微服务

随着时代的发展,微服务风口也越来越普及。那什么是微服务呢,我总结了几个点。

微服务是一种架构风格 一个应用拆分为一组小型服务 每个服务运行在自己的进程内,也就是可独立部署和升级 服务之间使用轻量级HTTP交互 服务围绕业务功能拆分 可以由全自动部署机制独立部署 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术

这么多个服务要部署,如果没有一个类似的SpringBoot的脚手架来快速帮我们构建项目,感觉是一件非常痛苦的事情,你想想光写配置,你都不知道要维护多久。

所以说SpringBoot只有好处,没有什么坏处。

了解自动配置原理

依赖管理
依赖管理这个是我们的项目pom.xml编写的  
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
</parent>

spring-boot-starter-parent的工程又依赖了spring-boot-dependencies
 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
  </parent>

spring-boot-dependencies几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制。

开发导入starter场景启动器
1、见到很多 spring-boot-starter-* : *就某种场景 
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入 
3、SpringBoot所有支持的场景 
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter 
4、见到的  *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。 
5、所有场景启动器最底层的依赖 
<dependency>  
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter</artifactId>
    <version>2.3.4.RELEASE</version> 
    <scope>compile</scope>
</dependency>

无需关注版本号,自动版本仲裁

1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本号。

可以修改默认版本号

1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
2、在当前项目里面重写配置在properties节点下修改版本号

<properties> 
    <mysql.version>5.1.43</mysql.version>
</properties>

自动配置

自动配好Tomcat 引入Tomcat依赖。 配置Tomcat
<dependency>  
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-tomcat</artifactId> 
    <version>2.3.4.RELEASE</version> 
    <scope>compile</scope> 
</dependency>

自动配好SpringMVC

引入SpringMVC全套组件 自动配好SpringMVC常用组件(功能)

自动配好Web常见功能,如:字符编码问题

SpringBoot帮我们配置好了所有web开发的常见场景

默认的包结构

主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,这就是为什么SpringBoot需要把逻辑代码放在一个包下载编写的一个原因。 无需以前的包扫描配置 想要改变扫描路径,@SpringBootApplication(scanBasePackages= "com.atguigu") 或者@ComponentScan 指定扫描路径
@SpringBootApplication 
等同于 
@SpringBootConfiguration 
@EnableAutoConfiguration 
@ComponentScan("com.atguigu.boot")

面试题问得最多的地方也是在这里,我们这里要答的话,最好把以上四个注解都一起回答