Spring Boot

发布于:2025-08-30 ⋅ 阅读:(21) ⋅ 点赞:(0)

SpringBoot介绍_Spring框架的缺点

image-20230802161328908

Spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP(面向切面)为思想内核,极大简化了JAVA企业级项目的开发。

虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。使用Spring进行项目开发需要在配置文件中写很多代码,所有这些配置都代表了开发时的损耗。

image-20211230141513777

除此之外,Spring项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。比如Spring5.0以上只能使用Junit4.12以上的版本。

总结起来,Spring的缺点就是:

  1. 配置过于繁琐。
  2. 引入的依赖过多,版本控制复杂。

实时效果反馈

1. 相比于SpringBoot,Spring的缺点是

A 配置简单,依赖较少。

B 配置繁琐,依赖过多。

C 配置繁琐,依赖较少。

D 配置简单,依赖过多。

答案

1=>B

SpringBoot介绍_什么是SpringBoot

image-20230802162202665

SpringBoot对Spring的缺点进行改善和优化,基于约定大于配置的思想,简化了Spring的开发,所谓简化是指简化了Spring中大量的配置文件和繁琐的依赖引入。所以SpringBoot是一个服务于框架的框架,它不是对Spring功能的增强,而是提供了一种快速使用Spring框架的方式。

SpringBoot的优点:

  1. 配置简单
  2. 依赖引入简单
  3. 提供了一些大型项目的非功能特性,如嵌入式服务器,安全指标,健康监测等。

自动配置

SpringBoot项目自动提供最优配置,同时可以修改默认值满足特定的要求。

起步依赖

SpringBoot的依赖是基于功能的,而不是普通项目的依赖是基于JAR包的。SpringBoot将完成一个功能所需要的所有坐标打包到一起,并完成了版本适配,我们在使用某功能时只需要引入一个依赖即可。

实时效果反馈

1. SpringBoot的核心思想是

A 面向切面编程

B 控制反转

C 约定大于配置

D 面向对象编程

2. SpringBoot的核心功能是

A 注解开发

B 自动配置

C 起步依赖

D 自动配置、起步依赖

答案

1=>C 2=>D

SpringBoot介绍_SpringBoot3介绍

SpringBoot3是目前SpringBoot最新版本,它包含了12个月以来151个开发者的5700多次代码提交。这是自 2018年SpringBoot发布2.0以来,SpringBoot的第一次重大修订。

当然使用SpringBoot是需要一定版本要求的:

工具 版本要求
IDEA 2021.2.1+
Java 17+
Maven 3.5+
Tomcat 10.0+
Servlet 5.0+
GraalVM(原生镜像功能) Community 22.3+
Native Build Tools(原生镜像功能) 0.9.19+

实时效果反馈

1. 使用SpringBoot3进行开发时,Java的最低版本是

A 8

B 11

C 17

D 20

答案

1=>C

SpringBoot入门_通过官网搭建项目

image-20211231104610790

接下来我们搭建一个SpringBoot项目,并引入SpringMVC的功能,首先我们可以通过官网搭建项目:

  1. 访问start.spring.io

  2. 生成SpringBoot项目

    image-20230802171928468

    SpringBoot版本说明:

    • SNAPSHOT:快照版,表示开发版本,随时可能修改;
    • M1(Mn):M1是milestone的缩写,也就是里程碑版本;
    • RC1(RCn):RC1是release candidates的缩写,也就是发布预览版;
    • Release:正式版,也可能没有任何后缀也表示正式版

    SpringBoot打包类型说明:

    • 使用SpringMVC开发的是一个web项目,但由于在SpringBoot中直接嵌入了Tomcat等Web容器,所以在使用SpringBoot做Web开发时不需要部署War文件,只需要打成Jar包即可。
  3. 解压生成的SpringBoot项目

  4. 在Idea中打开解压的SpringBoot项目即可

    image-20230802165525467

实时效果反馈

1. SpringBoot项目的打包类型为

A JAR

B WAR

C POM

D 以上都不对

2. SpringBoot版本号没有后缀,代表的是

A 快照版

B 里程碑版本

C 发布预览版

D 正式版

答案

1=>A 2=>D

SpringBoot入门_通过IDEA脚手架搭建项目(使用最多)

我们也可以在IDEA中利用脚手架工具搭建项目:

  1. 在IDEA中新建项目,项目类型为Spring Initializr,写项目名、存放位置、语言类型、项目类型、JDK版本等。点击下一步。

    注意:这里一定要将项目类型改为Maven

    image-20230802165739841

  2. 选择SpringBoot版本和需要的起步依赖,创建。

    image-20230802165916824

  3. 完成项目搭建

实时效果反馈

1. 通过IDEA脚手架搭建SpringBoot项目时,项目类型为

A Java

B Maven

C Spring Initializr

D Java Enterprise

答案

1=>C

SpringBoot入门_SpringBoot项目结构

image-20230802170609694

接下来我们了解SpringBoot项目的项目结构:

src.main.java

这个目录下存放的是Java代码,在我们写好的包名下,SprinBoot生成了一个启动类,启动类的作用是启动SpringBoot项目,运行启动类的main方法即可启动SpringBoot项目。

src.main.resources

这个目录下存放的是配置文件和页面相关的代码,SpringBoot默认在static目录中存放静态资源,如css、js、图片等等。而templates中存放模板引擎,如jsp、thymeleaf等。

由于SpringBoot极大简化了Spring配置,所以只有一个application.properties配置文件,Spring的自动配置功能使得大部分的配置都有默认配置,该文件的功能是覆盖默认配置信息,该文件不写任何信息都可以启动项目。

启动后默认端口号为8080,我们可以覆盖该配置:

server.port= 8888

src.test.java

这个目录下编写的是测试代码

pom文件

  1. SpringBoot项目必须继承spring-boot-starter-parent,即所有的SpringBoot项目都是spring-boot-starter-parent的子项目。spring-boot-starter-parent中定义了常用配置、依赖、插件等信息,供SpringBoot项目继承使用。

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>3.1.2</version>
      <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
  2. SpringBoot项目中可以定义起步依赖,起步依赖不是以jar包为单位,而是以功能为单位

    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
      </dependency>
    </dependencies>
    
  3. spring-boot-maven-plugin插件是将项目打包成jar包的插件。该插件打包后的SpringBoot项目无需依赖web容器,可以直接使用JDK运行

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

实时效果反馈

1. SpringBoot项目的父工程为

spring-boot-starter-parent

spring-boot-starter-web

spring-boot-starter-father

spring-boot-starter-super

2. 在SpringBoot项目中,文件夹下写Java代码

src.main.java

src.main.resources

src.test.java

D 以上都不对

答案

1=>A 2=>A

SpringBoot入门_通过Maven搭建项目

image-20211231105528166

不管是通过官网,还是通过脚手架搭建项目,都需要连接SpringBoot官网,但国内与SpringBoot官网连接并不稳定,此时我们也可以使用Maven手动搭建SpringBoot项目:

  1. 创建新项目

    image-20230803113459684

  2. 在pom中添加项目的父工程、起步依赖、插件、依赖和插件的下载地址

    <!-- 父工程 -->
    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>3.1.2</version>
    </parent>
    <!-- 起步依赖 -->
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
    
    
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
      </dependency>
    </dependencies>
    
    
    <!-- 插件 -->
    <build>
      <plugins>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
      </plugins>
    </build>
    
  3. 编写启动类

    @SpringBootApplication
    public class SpringBootApp {
      public static void main(String[] args) {
        SpringApplication.run(SpringBootApp.class, args);
       }
    }
    
  4. 编写配置文件application.properties

    #日志格式
    logging.pattern.console=%d{MM/dd HH:mm:ss.SSS} %clr(%-5level) ---  [%-15thread] %cyan(%-50logger{50}):%msg%n
    #端口号
    server.port=8889
    
  5. 运行启动类主方法,启动项目

实时效果反馈

1. 以下是SpringBoot配置文件的是

applicationContext.xml

SqlMapConfig.xml

springmvc.xml

application.properties

2. SpringBoot启动类中,主方法执行的代码是

Application.run()

Application.start()

SpringApplication.run()

SpringApplication.start()

答案

1=>D 2=>C

SpringBoot入门_编写Java代码

之前搭建的SpringBoot项目已经都整合了SpringMVC,我们编写一个控制器进行测试:

@Controller
public class MyController {
  @RequestMapping("/hello")
  @ResponseBody
  public String hello(){
    System.out.println("hello springboot!");
    return "hello springboot!";
   }
}

启动类在启动时会做注解扫描(@Controller、@Service、@Repository......),扫描位置为同包或者同级包下的注解,所以我们要在启动类同级或同级包下编写代码。

image-20230811151954651

启动项目,访问http://localhost:8889/hello

实时效果反馈

1. 在SpringBoot中,Java代码要写在

A 启动类同包下

B 启动类同级包下

C 启动类同包下或同级包下

D 以上都不正确

答案

1=>C

YAML文件_配置文件介绍

image-20220112193402288

SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,可以使用application.properties文件进行配置。properties文件是键值对类型的文件,之前一直在使用,所以我们不再对properties文件进行阐述。

Spring Boot Reference Documentation

可以查找配置文件如何覆盖SpringBoot项目的默认配置。

除了properties文件外,SpringBoot还支持YAML文件进行配置。YAML文件的扩展名为.yml.yaml。SpringBoot默认会从resources目录下加载application.propertiesapplication.yml文件。

YAML文件的基本要求如下:

  1. 大小写敏感
  2. 使用缩进代表层级关系
  3. 同级配置必须对齐,上下级配置必须缩进,但缩进的空格数不限。
  4. 相同的部分只出现一次
  5. 冒号和值之间必须要有空格

比如使用properties文件配置tomcat端口以及项目路径:

server.port=8888
server.servlet.context-path=/itbaizhan

而使用YAML文件配置tomcat端口:

server:
  servlet:
   context-path: /itbaizhan
  port: 8888

实时效果反馈

1. SpringBoot配置文件格式为

A properties

B xml

C yaml

D properties和yaml

2. 关于YAML文件,说法错误的是

A 扩展名为.yml.yaml

B 大小写不敏感

C 大小写敏感

D 使用缩进代表层级关系

答案

1=>D 2=>B

YAML文件_自定义配置数据

image-20230803145446115

除了覆盖默认配置,我们还可以在YAML文件中进行自定义配置,以便我们在项目中读取使用。

配置简单数据

  • 语法:

    数据名:
  • 示例代码:

    email: itbaizhan@sxt.com

配置对象数据

  • 语法:

    对象:
        属性名1: 属性值
        属性名2: 属性值
        
    # 或者
    对象: {属性名1: 属性值,属性名2: 属性值}
    
  • 示例代码:

    # 邮箱1
    my1:
      email: itbaizhan@sxt.com
      password: itbaizhan
    
    
    # 邮箱2
    my2: {email: itbaizhan1@sxt.com,password: itbaizhan}
    

配置集合数据

  • 语法

    集合:
        - 值1
        - 值2
        
    # 或者
    集合: [值1,值2]
    
  • 示例代码

    # 城市
    city1:
      - beijing
      - shanghai
      - tianjin
      - chongqing
    
    
    city2: [beijing,tianjin,shanghai,chongqing]
    
    
    # 集合中的元素是对象
    sxt:
      - address: beijing
       mobile: 13888888888
       email: bjsxt@sxt.com
      - address: shanghai
       mobile: 13777777777
       email: shsxt@sxt.com
      - address: guangzhou
       mobile: 13666666666
       email: gzsxt@sxt.com
    

注意:值与之前的 - 之间存在一个空格

实时效果反馈

1. yml配置集合时,-与值之间要有

A 空格

B 逗号

C 句号

D 冒号

答案

1=>A

YAML文件_@Value读取配置文件

image-20220112193818342

读取自定义配置时,我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上,用法如下:

  1. 配置文件

    email: itbaizhan@sxt.com
    
    
    my1:
      email: itbaizhan@sxt.com
      password: itbaizhan
    
    
    city1:
      - beijing
      - shanghai
      - tianjin
      - chongqing
    
    
    sxt:
      - address: beijing
       mobile: 13888888888
       email: bjsxt@sxt.com
      - address: shanghai
       mobile: 13777777777
       email: shsxt@sxt.com
      - address: guangzhou
       mobile: 13666666666
       email: gzsxt@sxt.com
    
  2. 读取配置文件数据:

    @Controller
    public class YmlController1 {
      @Value("${email}")
      private String email;
    
    
      @Value("${my1.password}")
      private String password;
    
    
      @Value("${city1[0]}")
      private String city1;
    
    
      @Value("${sxt[1].mobile}")
      private String mobile;
    
    
      @RequestMapping("/yml1")
      @ResponseBody
      public String yml1(){
        return email+":"+password+":"+city1+":"+mobile;
       }
    }
    

    @Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中。

实时效果反馈

1. 使用注解可以将配置文件中的值映射到Bean的属性中

@Import

@Value

@ConfigurationProperties

@SpringBootApplication

答案

1=>B

YAML文件_@ConfigurationProperties读取配置文件

image-20220112193956316

通过@ConfigurationProperties(prefifix="对象")可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。

  1. 配置文件

    user:
      id: 10001
      username: shangxuetang
      address:
       - beijing
       - tianjin
       - shanghai
       - chongqing
      grades:
       - subject: math
        score: 100
       - subject: english
        score: 90
    
  2. 实体类

    public class Grade {
      private String subject;
      private double score;
      // 省略getter/setter/tostring
    }
    
  3. 读取配置文件

    @Controller
    @ConfigurationProperties(prefix = "user")
    public class YmlController2 {
      private int id;
      private String username;
      private List<String> address;
      private List<Grade> grades;
    
    
      @RequestMapping("/yml2")
      @ResponseBody
      public String yml2(){
        System.out.println(id);
        System.out.println(username);
        System.out.println(address);
        System.out.println(grades);
        return "hello springboot!";
       }
    
    
      public int getId() {
        return id;
       }
    
    
      public void setId(int id) {
        this.id = id;
       }
    
    
      public String getUsername() {
        return username;
       }
    
    
      public void setUsername(String username) {
        this.username = username;
       }
    
    
      public List<String> getAddress() {
        return address;
       }
    
    
      public void setAddress(List<String> address) {
        this.address = address;
       }
    
    
      public List<Grade> getGrades() {
        return grades;
       }
    
    
      public void setGrades(List<Grade> grades) {
        this.grades = grades;
       }
    }
    

实时效果反馈

1. 使用注解可以将配置文件中的对象自动与实体Bean进行映射

@Import

@Value

@ConfigurationProperties

@SpringBootApplication

答案

1=>C

YAML文件_占位符

image-20220112194329832

YAML文件中可以使用${}占位符,它有两个作用:

使用配置文件中的值

  1. 编写配置文件

    server:
      port: 8888
    
    
    myconfig:
      myport: ${server.port}
    
  2. 读取配置文件

    @Controller
    public class YmlController3 {
      @Value("${myconfig.myport}")
      private int port;
    
    
      @RequestMapping("/yml3")
      @ResponseBody
      public String yml3(){
        System.out.println(port);
        return "hello springboot!";
       }
    }
    

使用框架提供的方法