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

本教程将以SpringBoot 2.3/2.4 进行讲解。

学习要求

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

  • 熟悉Spring基础
  • 熟悉Maven使用

使用的环境是

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

SpringBoot的由来

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

SpringBoot2核心技术(一)了解自动配置原理_第1张图片

做个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编写的  

        org.springframework.boot
        spring-boot-starter-parent
        2.3.4.RELEASE


spring-boot-starter-parent的工程又依赖了spring-boot-dependencies
 
    org.springframework.boot
    spring-boot-dependencies
    2.3.4.RELEASE
  

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、所有场景启动器最底层的依赖 
  
    org.springframework.boot 
    spring-boot-starter
    2.3.4.RELEASE 
    compile

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

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

  • 可以修改默认版本号

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

 
    5.1.43

自动配置

  • 自动配好Tomcat
  • 引入Tomcat依赖。
  • 配置Tomcat
  
    org.springframework.boot 
    spring-boot-starter-tomcat 
    2.3.4.RELEASE 
    compile 
  • 自动配好SpringMVC

    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(功能)
  • 自动配好Web常见功能,如:字符编码问题

    • SpringBoot帮我们配置好了所有web开发的常见场景
  • 默认的包结构

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

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

你可能感兴趣的:(javaspringboot)