简化spring项目的配置
一、What
1、SpringBoot框架是什么?与Spring框架是什么关系?
Boot译为引导,SpringBoot框架的出现是为了解决Spring框架开发使用中配置繁琐的问题,是Spring系列项目中的一个全新项目。
SpringBoot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。
它集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box),大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于 Java 的配置),开发者能够更加专注于业务逻辑。
二、Why
1、为什么要学习SpringBoot框架?SpringBoot的特性是什么?
- 能够快速创建基于spring的程序
- 能够直接使用Java main方法启动内嵌的Tomcat服务器运行springboot程序,不需要部署war包
- 提供约定的starter POM来简化Maven配置,让Maven的配置变得简单
- 自动化配置,根据项目的Maven依赖配置,springboot自动配置spring、springmvc等
- 提供了程序的健康检查功能
- 基本可以完全不使用xml配合文件,采用注解配置
三、How
1、SpringBoot框架的工作原理
1.1 starter工程上整合常用场景的jar包依赖
SpringBoot是通过定义各种各样的Starter来管理这些依赖的。SpringBoot将所有的功能场景都抽取出来,做成一个个的starter (启动器),只需要在项目中引入这些starter即可,所有相关的依赖都会导入进来。
例如,开发web服务、可以引入spring-boot-starter-web,做单元测试、引入spring-boot-starter-test。
最常用的一个starter是spring-boot-starter-parent,所有初始化maven工程可以继承它,然后再引入其他starter或第三方jar包就可以使用parent提供的版本号了。
1.2 通过组合注解实现自动化配置
在JDK1.5推出注解功能以后,Spring框架实现了大量的注解来替代原有的基于XML的配置,主要用于配置管理、Bean的注入以及AOP等相关功能的实现。
Spring 4提供了一个通用的基于条件的注解@Conditional,该注解可以根据满足某一个特定条件与否来决定是否创建某个特定的Bean,例如,某个依赖包jar在一个类路径的时候,自动配置一个或多个Bean时,可以通过@Conditional注解来实现只有某个Bean被创建时才会创建另外一个Bean,这样就可以依据特定的条件来控制Bean的创建行为,这样的话我们就可以利用这样一个特性来实现一些自动的配置。
Spring Boot中以@Conditional为元注解又重新定义了一组针对不同场景的组合条件注解。
1.3 通过@SpringBootApplication启动服务
Spring Boot最核心的组合注解@SpringBootApplication,其中包含三个主要的子注解:
- @SpringBootConfiguration:标记说明这个类是主配置类,springboot应用将通过这个类的main()方法来启动程序
- @ComponentScan:扫描当前包及子包的注解
- @EnableAutoConfiguration:开启自动配置
1.4 SpringBoot自动装配的流程
- 创建SpringApplication对象
- 执行run()方法完成应用程序的启动
- 执行prepareContext()方法完成的是对上下文对象的初始化操作
- 执行refreshContext()方法进行整个容器的刷新过程
- 解析@Import注解,调用getImport()方法,从主类开始递归解析注解,把所有包含@Import的注解都解析到。
2、简单使用
使用springboot构建一个web服务的简单步骤如下:
2.1、引入spring-boot-starter-web依赖
继承spring-boot-starter-parent(依赖版本管理),引入spring-boot-starter-web这个starter,用于web服务开发场景下的组合依赖包。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.watermelon</groupId>
<artifactId>test-springboot</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.2、创建一个controller类
package com.watermelon.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Breaker-93
* @date 2023/08/01
*/
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/hi1")
public String hi() {
return "Hello,world";
}
}
2.3、配置yml文件
默认resources目录下创建application.yml文件,简单配置如下:
server:
port: 8585
servlet:
context-path: /
2.4、创建一个启动类
通过@SpringBootApplication注解标识启动类。
package com.watermelon;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Breaker-93
* @date 2023/08/01
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
通过该类启动一个web服务,启动后测试访问接口:
http://127.0.0.1:8585/test/hi1
整个工程的目录结构如图:
3、SpringBoot框架的源码解读
后续会针对以下内容做进一步学习,逐渐点亮所有链接。
- spring-boot-autoconfigure
参考链接:
- https://blog.csdn.net/huangtenglong/article/details/127862112
- https://jiazi.natyun.net/2326.html