SpringBoot101——开始

摘抄自 https://www.liaoxuefeng.com/wiki/1252599548343744/1266265175882464,个人学习笔记,仅作分享。

为了创建一个可执行的 jar,我们需要在 pom.xml 中添加 spring-boot-maven-plugin 插件。在 pom.xmldependencies 节点下面插入以下几行。

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

学习的参考教程:https://springdoc.cn/spring-boot/getting-started.html

安装

这里在 maven 空项目的基础上进行操作。

项目创建之后,修改为如下的 pom.xml 文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>top.suyiiyii</groupId>
    <artifactId>springboot101</artifactId>
    <version>1.0-SNAPSHOT</version>

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

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

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

</project>

其中

spring-boot-starter-parent

首先,该项被放在了 parent 标签中,parent 标签用于在一个子模块项目中引用一个父模块项目。在这里用于导入一些配置。

例如 - 依赖管理: 它提供了默认的依赖版本,比如 Spring Boot 的相关组件和其他常用库。这样,你在添加依赖时不需要指定版本号,Maven 会自动使用 spring-boot-starter-parent 中定义的版本。 - 构建配置: 它设置了编译器插件的默认配置,例如 Java 版本(maven.compiler.source 和 maven.compiler.target)。在这里,版本被设置为 17。 提供了项目构建的默认属性,如源代码和目标文件的字符编码(project.build.sourceEncoding)。 - 插件管理: 父 POM 包含了常用的 Maven 插件及其配置,如 Spring Boot 的 spring-boot-maven-plugin 用于打包可执行的 JAR 或 WAR 文件。 这样可以避免在每个子模块中重复定义插件及其配置。 - 约定优于配置: Spring Boot 通过 spring-boot-starter-parent 引入了一套约定,使得项目的结构和配置更加规范,简化了新项目的创建和维护。 - 版本升级: 当 Spring Boot 发布新版本时,只需更新 spring-boot-starter-parent 的版本号,即可将整个项目升级到最新稳定版本,确保所有依赖都与 Spring Boot 版本兼容。

spring-boot-starter-web

这是 spring web 的具体依赖,这里不需要写版本号,因为 spring-boot-starter-parent 会为其他依赖项自动配置版本号。

这个 starter 提供了 springweb, springmvc, jackson, tomcat 等 web 开发需要的依赖。配置这一个 starter,就可以把这些依赖都配置好。提高开发效率。

使用mvn dependency:tree可以看到当前项目有哪一些依赖

编写代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class MyApplication {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

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

}

一个基本的 springweb 程序,允许 main 方法即可开启一个 tomcat 服务器。

@RestController

该注解用于定义一个控制器,该控制器的所有方法都默认返回 JSON 或 XML 等格式的响应。

@RestController 注解结合了@Controller 和@ResponseBody 两个注解,所以你不需要在每个方法上都添加@ResponseBody 注解。

@SpringBootApplication

@SpringBootApplication 是一个方便的注解,它包含了以下三个注解:

  1. @Configuration:标记类为应用程序上下文的 Bean 定义的源。
  2. @EnableAutoConfiguration:告诉 Spring Boot 根据类路径设置,其他 bean 和各种属性设置开始添加 bean。
  3. @ComponentScan:告诉 Spring 在包中查找其他组件,配置和服务,让它找到@Controller,@Service 等类。

所以,当你在主类上使用@SpringBootApplication 注解时,你实际上是在声明一个配置类,启用自动配置,以及启用组件扫描。这就是为什么你的应用程序能够启动并运行,因为所有的事情都被自动配置了。

tomcat

这是因为 Spring Boot 的设计理念。Spring Boot 提供了一个嵌入式的 Servlet 容器(如 Tomcat),这样可以使得开发者无需单独安装和部署 Servlet 容器就能运行 Web 应用。

在你的 pom.xml文件中,你已经添加了spring-boot-starter-web 依赖,这个依赖包含了 Spring MVC 和 Tomcat,因此当你运行 main 方法时,Spring Boot 会自动配置并启动一个 Tomcat 服务器。

具体来说,当你运行SpringApplication.run(MyApplication.class, args);这行代码时,Spring Boot 会做以下事情:

  1. 创建一个 Spring 应用上下文
  2. 注册一个 CommandLinePropertySource,以便将命令行参数作为 Spring 属性
  3. 刷新应用上下文,加载所有单例 beans
  4. 启动所有 CommandLineRunner beans

在这个过程中,Spring Boot 会检测到 classpath 中的 Tomcat 依赖,并自动配置和启动 Tomcat 服务器。

“main”方法

我们应用程序的最后部分是 main 方法。这是一个标准的 Java 入口方法,也就是应用的启动方法。我们的 main 方法通过调用 run 方法,把应用委托给 Spring Boot 的 SpringApplication 类。SpringApplication 引导我们的应用程序启动 Spring,而 Spring 又会启动自动配置的 Tomcat 网络服务器。我们需要将 MyApplication.class 作为参数传递给 run 方法,以告诉 SpringApplication 哪个是要的 Spring 组件。args 数组也被传入,这是命令行参数。

运行

maven

mvn spring-boot:run

创建一个可执行 Jar

为了创建一个可执行的 jar,我们需要在 pom.xml 中添加 spring-boot-maven-plugin 插件。在 pom.xmldependencies 节点下面插入以下几行。

1
2
3
4
5
6
7
8
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

这样做的目的是让 maven 能够打包出一个带有 tomcat 的 jar 文件

Licensed under CC BY-NC-SA 4.0