Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
核心注解是 @SpringBootApplication,它主要由@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan这三个构成:
主要有.properties 和 .yml
.yml 格式不支持 @PropertySource 注解导入配置
个人理解 Spring Boot 就是由各种 Starter 组合起来的,我们自己也可以开发Starter。
当一个项目变得相当复杂,管理依赖会成为一个噩梦,因为当中涉及太多 artifacts 了。
这时候 SpringBoot starter 就派上用处了。其他所需的依赖以一致的方式注入并且被管理。
所有的 starter 都归于 org.springframework.boot 组中,并且它们都以由 spring-boot-starter- 开头取名。这种命名方式使得我们更容易找到 starter 依赖,特别是当我们使用那些支持通过名字查找依赖的 IDE 当中。
SpringBoot 提供了非常多的 starter ,其中最常用的是:
使用 @ImportResource 注解导入老 Spring 项目配置文件
注入Environment对象:通过Environment 的 getProperty() 方法读取指定配置 Key 的内容
使用@Value注解,实现单个配置的注入
使用@ConfigurationProperties注解,实现一组配置的注入
主要有两种方式:
Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过@ImportResource 注解可以引入一个 XML 配置
为了实现Spring Boot的安全性,我们使用 spring-boot-starter-security依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter并覆盖其方法
继承spring-boot-starter-parent项目
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.6.2version>
<relativePath/>
parent>
导入spring-boot-dependencies项目依赖
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>2.6.2version>
parent>
Spring Boot 支持 Logging、Log4j2、Lockback 做为日志框架,若是你使用 Starters 启动器,Spring Boot 将使用 Logback 做为默认日志框架
Spring Initiatlizr 让创建 Spring Boot 项目变的很容易,但是,也可以通过设置一个 maven 项目并添加正确的依赖项来开始一个项目
创建方式有两种:
Maven的目录结构:
启动一个 Spring Boot项目,首先运行 Application 启动类的 main 方法,main 方法中调用了 SpringApplication.run 方法,run 方法中又调用了最核心的 refreshContext 方法,这里面又调用了我们最熟悉了 spring 容器启动模板方法refresh 方法,默认 Spring Boot 会启动 Tomcat,在 refresh 中的 onRefresh() 中执行;onRefresh 调用了 createWebServer() 方法,通过TomcatServletWebServerFactory 开始创建 Tomcat 实例;最后在 refresh 方法中的 finishRefresh() 中调用 Tomcat 实例的 start 逻辑,并将应用上下文发布的 webServer 中,至此完成 Tomcat 的启动
Spring Boot 配置加载顺序优先级是:propertiese文件、YAML文件、系统环境变量、命令行参数。
bootstrap 比 applicaton 优先加载,配置在应用程序上下文的引导阶段生效, 而且 boostrap 里面的属性不能被覆盖;application 用于 Spring Boot 项目的自动化配置
Spring boot actuator 是 spring 启动框架中的重要功能之一,Spring boot 监视器可以访问生产环境中正在运行的应用程序的当前状态。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态
Spring 通过使用 @ControllerAdvice 注解处理异常,实现一个ControllerAdvice 类来处理控制器类抛出的所有异常
使得 Spring Boot 配置文件更加有层次感,结构也比较清晰,不容易混淆,目前也是人类可读的数据序列化语言
在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled 注解,另一个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。
使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可
整个过程就是将类路径下 “META-INF/spring.factories” 里面配置的所有 EnableAutoConfiguration 的值加入到容器中
bootstrap.properties 和 application.properties
Spring Boot 打成jar包可以直接通过 java -jar *.jar 启动项目,但是不能够像普通 jar 包一样被其他项目引用。普通 jar 解压后就是包名,可以直接引用内部的类,而 Spring Boot 解压后 BOOT/classes 目录下才是真正的代码,因此不能被直接引用,如果需要被引用可以配置 pom,将 SpringBoot 打包成两个 jar 包,一个可执行,一个可引用
@SpringBootApplication: 它 封 装 了 核 心
的@SpringBootConfiguration+@EnableAutoConfiguration +@ComponentScan
这三个类,大大节省了程序员配置时间,这就是 SpringBoot 的核心设计思想.
@EnableScheduling 是通过@Import 将 Spring 调度框架相关的bean 定义都加载到IoC 容器
@MapperScan:spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对 mybatis 接口的扫描
@RestController 是 @Controller 和 @ResponseBody 的 结合, 一个类被加上@RestController 注解,数据接口中就不再需要添加@ResponseBody,更加简洁。
@RequestMapping,我们都需要明确请求的路径.
@GetMappping,@PostMapping, @PutMapping, @DeleteMapping 结合@RequestMapping 使用, 是 Rest 风格的, 指定更明确的子路径.
@PathVariable:路径变量注解,用{}来定义 url 部分的变量名.
@Service 这个注解用来标记业务层的组件,我们会将业务逻辑处理的类都会加上这个注解交给 spring 容器。事务的切面也会配置在这一层。当让 这个注解不是一定要用。有个泛指组件的注解,当我们不能确定具体作用的时候 可以用泛指组件的注解托付给spring 容器
@Component 和 spring 的注解功能一样, 注入到 IOC 容器中
@ControllerAdvice 和 @ExceptionHandler 配合完成统一异常拦截处理.