【Spring Boot】基础入门及解析

1.SpringBoot 概述

  • 由Spring引出SpringBoot
    如果你是一个Java开发者,想必Spring对你来说不可能会陌生,在我们一开始使用Spring的时候,会发现其组件代码轻量级的,这也是他的设计初衷,但是在使用过程中,随着业务发展,使用的技术和技术间依赖越来越多,其配置也变得越来越重量级
    一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。但是无论哪种配置方式,最终都需要消耗很多时间让开发者自己去解决技术的配置问题。
    其次,虽然我们现在已经拥有了很多不错的项目依赖管理工具,例如Maven,Ant等等,他们可以帮我们快速的获取和管理对应的依赖,但是他们无法在一开始就帮我们解决依赖间的兼容问题,这种问题有时不容易被发现,也不容易被快速的定位。
    以上种种问题,都在SpringBoot中有了一个答案。↓

  • SpringBoot 特点
    SpringBoot对上述Spring的缺点进行的改善和优化,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度上缩短了项目周期。
    约定优于配置的概念简述 : 一分钟了解约定优于配置
    SpringBoot具体还有以下四个特点:
    • 为基于Spring的开发提供更快的入门体验
    • 开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求
    • 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等
    • SpringBoot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式

  • SpringBoot 核心功能
    具体核心功能的说明会在后边在写代码时再详细说明,这里只做概述。
    • 起步依赖 (简化依赖配置和解决依赖间的兼容问题)
      起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
      简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
    • 自动配置 (解决重量级配置问题)
      Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是Spring自动完成的。

2.SpringBoot 工程创建

  • Maven创建SpringBoot工程

首先,使用idea工具创建一个maven工程,该工程为普通的java工程,不使用Maven骨架
在这里插入图片描述
下来,随便给个名字,完成创建
在这里插入图片描述
再下来我们打开pom.xml文件,添加SpringBoot的起步依赖
SpringBoot要求,项目要继承SpringBoot的起步依赖spring-boot-starter-parent

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
</parent>

我们做一个简单的SpringBoot项目的web工程开发,所以项目要导入web的启动依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

我们发现这两个依赖的ID都是带有starter的,这就说明了其为一个启动依赖,是一组依赖的集合,等会我们会详细去看,等待Maven加载完依赖,pom.xml如下:
在这里插入图片描述
如果有童鞋第一次用的比较早的RELEASE版本的话,可能在Maven添加依赖时报错,例如:

<version>2.0.1.RELEASE</version>

Maven报错:
Project ‘org.springframework.boot:spring-boot-starter-parent:2.0.1.RELEASE’ not found
解决方案如下:
Project ‘org.springframework.boot:spring-boot-starter-parent:x.x.x.RELEASE’ not found


在添加完启动依赖后,我们创建SpringBoot引导类,也叫启动类,如下:

@SpringBootApplication
public class MySpringBootApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(MySpringBootApplication.class);
    }

}

之后创建我们的控制器类,如下:

@Controller
public class MyController {
    
    

    @RequestMapping("/mySpringBoot")
    @ResponseBody
    public String quick(){
    
    
        return "springboot 访问成功!";
    }

}

完成,我们启动MySpringBootApplication:
在这里插入图片描述
控制台上打印了许多信息,从上到下包括spring boot的版本号,tomcat的端口号以及版本号(引入web工程的启动依赖后,在启动时会启动内嵌的tomcat服务),还有启动花费的时间等。
这里我们尝试去访问一下:
在这里插入图片描述
到这里,springboot工程的创建就完成了,很简单,在上边做开发也便捷了许多。

3.使用Idea快速创建SpringBoot工程

首先,确保我们在创建工程时,有Spring的启动帮助选项,旧的版本其名为Spring Initializr,新版本名为Spring Assistant
在这里插入图片描述

如果没有此选项,解决方案如下:
IDEA新建项目时,没有Spring Initializr选项


然后我们继续创建,做一些简单的项目属性设置:
在这里插入图片描述
然后,spring提供了很多选项,左边框中当我们单击的时候,右边框会有更详细的依赖选项,当我们勾选了某个依赖,他会为我们自动的引入其依赖,这里我们就勾选了一个我们上边用到的web开发的依赖,然后还可以选择spring boot的版本,我们选用2.3.4的版本:
在这里插入图片描述
最后确认项目的名称等信息,完成创建:
在这里插入图片描述
创建完成:
在这里插入图片描述
图中红色框中内容都可以直接删除。包括 .mvn文件夹(如果你使用的是自己安装配置的maven,而非idea自带的maven的话,请删除掉,否则他会自动使用默认的去加载)
有时这里创建的maven工程idea没有自动识别(没有maven窗口),需要我们手动去认证,选择到项目中的pom.xml文件,右键点击,Add as maven project,然后reload一下maven project,完成依赖的导入。
我们打开pom.xml文件,发现之前我们所做的配置已经被默认导入了:
在这里插入图片描述
除过上述依赖,还有boot的启动测试及maven的插件。
在这里插入图片描述
我们的启动引导类,也被默认创建好了,以及我们后续会用到的配置文件:
在这里插入图片描述
至此,spring boot工程的创建先告一段落了。

4.SpringBoot 原理简要分析之起步依赖

首先,我们上述的例子工程中,使用了两个起步依赖,一个是springboot的,另一个是web的,我们来对这两个起步依赖进行一个简单的概述分析

  • spring-boot-starter-parent
    • 首先我们按住alt点击 spring-boot-starter-parent,会进入到spring-boot-starter-parent的pom.xml,这里感觉上就是一个父类一般。
      在这里插入图片描述
    • 这里是spring-boot-starter-parent的pom.xml,我们再度按住Ctrl点击pom.xml中的spring-boot-starter-dependencies
      在这里插入图片描述
    • 跳转到了spring-boot-starter-dependencies的pom.xml,这个依赖的pom.xml中,有着非非非非非常多的依赖,随便截了一张,就是几十个依赖
      在这里插入图片描述
      从上面的spring-boot-starter-dependencies的pom.xml中我们可以发现,一部分坐标的版本、依赖管理、插件管理已经定义好,所以我们的SpringBoot工程继承spring-boot-starter-parent后已经具备版本锁定等配置了。所以起步依赖的作用就是进行依赖的传递。

  • spring-boot-starter-web
    • 还是一样,我们按住Ctrl点击pom.xml中的spring-boot-starter-web,跳转到了spring-boot-starter-web的pom.xml,这个起步依赖没有更深的传递关系,就只有这么一层,其帮助我们打包了一系列的web相关的依赖包
      -
      所以我们一开始在不用进行过多配置情况下,就可以使用springmvc进行web代码的开发,这里起步依赖还有一个作用就是对各个依赖的版本进行了自动配置,不会出现因为依赖间版本错误的问题,导致部分依赖不可用

5.SpringBoot 原理简要分析之自动配置

  • 这里我们回过头来看一下代码,按住Ctrl点击查看启动类MySpringBootApplication上的注解@SpringBootApplication
    在这里插入图片描述

  • 我们会发现这个注解是很多注解的一个集合,完成了多个注解的功能
    在这里插入图片描述
    其中,
    @SpringBootConfiguration:等同与注解@Configuration,既标注该类是Spring的一个配置类
    @EnableAutoConfiguration:SpringBoot自动配置功能开启

  • 按住Ctrl点击查看注解@EnableAutoConfiguration
    在这里插入图片描述
    其中,@Import(AutoConfigurationImportSelector.class) 导入了AutoConfigurationImportSelector类,这个类从名字看来是一个自动配置的选择器类,应该是自动配置功能的一个重要实现部分

  • 我们继续按住Ctrl点击查看AutoConfigurationImportSelector类源码
    在这个类中有很多的方法,我们查看的顺序为:
    1.selectImports(…) 寻找导入的配置
    2.getAutoConfigurationEntry(…) 获取自动配置的Entry键值对
    3.getCandidateConfigurations(…) 获取候选配置
    4.List configurations = SpringFactoriesLoader.loadFactoryNames(
    getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
    这里使用工厂类加载获取配置
    这里获取的配置就是META-INF/spring.factories文件中对应的类名称列表

  • 然后我们在添加的依赖中来找到对应的spring.factories文件
    在这里插入图片描述

将其打开,里边存放的内容就是有关自动配置的配置信息:
在这里插入图片描述

上面配置文件存在大量的以Configuration为结尾的类名称,这些类就是存有自动配置信息的类,而SpringApplication在获取这些类名后再加载,获取其配置信息

  • 我们找一个简单的我们熟悉配置类来简单的看一下其配置的信息,以ServletWebServerFactoryAutoConfiguration为例子,我们将其打开
    在这里插入图片描述
    其中,@EnableConfigurationProperties(ServerProperties.class) 中就是自动加载ServerProperties服务器配置属性类,我们将其打开
    在这里插入图片描述
    其中,prefix = “server” 表示SpringBoot配置文件中的前缀,SpringBoot会将配置文件中以server开始的属性映射到该类的字段中。映射关系如下:
    在这里插入图片描述
    在配置文件中添加server.port=8888,就修改了我们http也就是tomcat的访问端口号了,在ServerProperties.class类中的所有属性都是可以自己去配置值的,不配置就是使用约定大于配置的概念,使用约定的默认值8080.

6.SpringBoot 配置文件

SpringBoot是基于约定的,所以很多配置都是有默认值的,但我们在实际的开发中是会修改一些配置值的,我们就可以使用application.properties或者application.yml,application.yaml进行覆盖配置。
application.yml 和 application.yaml是相同格式的文件,只是单纯的后缀名称有稍许不同。其二者没有本质上的区别。
SpringBoot默认会从Resources目录下加载application.propertiesapplication.yml,application.yaml文件。其中,application.properties文件是键值对类型的文件,比较简单,就不介绍了。除了properties文件外,SpringBoot还可以使用yml(yaml)文件进行配置,我们主要对yml(yaml)文件进行一下了解。
由于这个配置文件内容比较独立,这里另开了一个博客,链接如下:
【Spring Boot】配置文件YML:入门和使用

猜你喜欢

转载自blog.csdn.net/cjl836735455/article/details/109261134