Spring Boot 应用入门整理

  1. 背景
  2. 我的第一个 Spring Boot
  3. 工作原理
    1. 依赖项管理
    2. 启动器
    3. ⼊⼝⽅法
    4. ⾃动装配
    5. ⽤户组件扫描
    6. @SpringBootApplication
    7. 项目构建
    8. JAR包⽬录说明
  4. Spring Boot 配置

背景

技术层⾯看,Spring 配置太繁琐需要简化,如果直接对现有项⽬代码重构成本太⼤,

所以基于场景封装了许多配置(跨域、数据库连接…),使得我们拿来即用。

值得一提的是,部署方面集成了 tomcat\Jetty,可直接运行,免去了部署容器的操作。

结合下图理解

商业化层⾯看,Pivotal 公司要为其 PAAS 平台打造⽣态。

(好比腾讯提供微信小程序开发平台,大家基于这套体系开发小程序,这为微信小程序平台打造生态)

我的第一个 Spring Boot

可以结合 官网入门

示例项目大多用的是 maven ,实际项目中还是以 gradle 做项目依赖管理好点

1、新建 Maven ⼯程,添加⽗依懒

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

2、添加 web 启动器

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

3、添加启动类与控制器

@RestController
@EnableAutoConfiguration
public class MainApplication {
    @RequestMapping("/")
    public String hello() {
        return "hello spring boot";
    }
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

运行 main 方法后,就可以通过 8080 访问 web 项目了。相比以前 spring mvc 一大堆配置文件,spring boot 简简单单几句代码就实现了一个web项目,它是怎么做到的呢?

工作原理

依赖项管理

示列中的 POM.xml 继承⾃ spring-boot-starter-parent,⽽它⼜继承⾃ spring-boot-dependencies。其⽬的是对 Spring boot 中的各依懒进⾏统⼀的版本管理 ,后续项⽬在引⼊ 依懒时不在需要指定版本。

  • spring-boot-starter-parent:声明了各个插件的版本
  • spring-boot-dependencies:声明了各个依赖组件的版本

没用 spring boot 之前各个第三⽅库版本兼容是⼀件⾮常头痛的事情,处理⽅式⽐较被动,只能出了问题在找原因。

启动器

包含指定场景所需的所有依懒组件,同时它也可以包含其它启动器。例如 spring-boot-starter-web 是⼀个 WEB 启动器,它包含了 Spring-webspring-webmvc 组件 以及 spring-boot-starter-tomcat 启动器。

⼊⼝⽅法

⽤⼀个可执⾏ main ⽅法作为⼊⼝,引导 SpringApplication 系统启动。启动时需要传⼊,引导主类,以及执⾏参数。引导类⽤于读取注解配置。

⾃动装配

在引导类中配置了 @EnableAutoConfiguration ,其⽤于开启⾃动装配。⾃动装配的逻辑是

    1. 扫描 spring-boot-autoconfigure-2.4.0.jarMETA-INF/spring.factories ⽂件
    1. 读取 org.springframework.boot.autoconfigure.EnableAutoConfiguration ⾃动装配类
    1. 判定装配类是否满⾜装配条件?
    1. 如果满⾜则装配指定@Bean

在示例中引⼊了 web\mvc\servlet 等组件,所以 DispatcherServletAutoConfiguration、 WebMvcAutoConfiguration 等⾃动装配类都发触发装配动作,从⽽往 Spring ioc 容器中装配 DispatchServlet、RequestMappingHandlerAdapter 等 WEB 相关组件。

由此可得出结论,所谓⾃动装配的依据,是基于项⽬环境推演的:

加⼊ starter-web 环境就会 装配WEB相关的组件,

加⼊ starter-reids 就会装配Redis相关组件

⽤户组件扫描

@RestController、@RequestMapping 都是 MVC 相关组件,由于其配置在引导类中所以会被 ⼀起载⼊。如果装载基它位置的组件,需要 @ComponentScan。默认它会把引导类所在包设 为扫描范围。也可通过basePackages来⾃定义扫描范围.

@SpringBootApplication

该注解是 @EnableAutoConfiguration、与 @ComponentScan 注解的合并,使⽤它可以进⼀ 步简化配置

项目构建

我前面提到了,spring boot 集成了 tomcat 容器,也就是说不需要放到 tomcat 下面,

他是可以通过 java -jar xxx.jar 独立运行的。

要想做到这一点,需要一个特殊的类装载器:

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

在使⽤ maven 构建后就可以⽣成⼀个 运⾏时JAR,输⼊常规命令就可以启动

java -jar xxx.jar

JAR包⽬录说明

./:Spring Boot类装载器
./META-INF/:JAR 元信息
./BOOT-INF/classes/:项⽬⾃身类⽂件
./BOOT-INF/lib/:项⽬依懒JAR包组件
./BOOT-INF/lib/classpath.idx: 依赖的JAR清单
./BOOT-INF/lib/layers.idx: 项⽬⽂件清单,⽤于制作Docker镜像

Spring Boot 配置

总共有三种⽅式提供配置:

  1. 启动参数(JVM参数\启动参数)
  2. application.propertites 配置⽂件
  3. application.yml 配置⽂件

参数配置示例:

启动参数,通过main方法中args[]参数可取

java -jar xxx.jar --server.port=8081 3 

jvm参数, 可通过System.getProperty 读取

java -Dserver.port=8081 -jar xxx.jar

application.properties 配置⽂件

server.port=8081

application.yml 配置⽂件,其优先级⾼于properties

server:
  port: 8082

转载请注明来源。 欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。 可以在下面评论区评论,也可以邮件至 sharlot2050@foxmail.com。

文章标题:Spring Boot 应用入门整理

字数:1.2k

本文作者:夏来风

发布时间:2020-11-25, 22:41:00

原始链接:http://www.demo1024.com/blog/java-springboot/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。