第一章、Spring Boot开发入门
Spring Boot设计初衷是为了简化Spring配置,从而让用户可以轻松构建独立运行的程序,极大地提高开发效率。
1.1 Spring Boot 概述
Spring Boot框架本身不提供Spring框架的核心特性以及扩展功能,只是用于快速敏捷开发新一代基于Spring框架的应用,并且在开发中大量使用“约定优于配置”思想摆脱Spring框架中复杂的手动配置,同时衍生出了JavaConfig这种优先的配置方式。也就是说SpringBoot并不是替代Spring框架的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具,同时Spring Boot集成了大量常用的第三方库配置(例如Jackson、JDBC、Redis、Mail等)。
1.2 Spring Boot 的优点
- 可快速构建独立的Spring应用
依靠大量注解实现自动化配置的全新框架。在构建Spring应用时,我们只需要添加相应依赖即可。 - 直接嵌入Tomcat Jetty Undertow服务器 (无须部署WAR文件)
- 通过依赖启动器简化构建配置
- 自动化配置Spring和第三方库
内部默认提供了各种自动化配置类,无须手动在配置文件中进行相关配置 - 提供生产就绪功能
提供用于生产环境运行时的特性 例如指标 、监控检查和外部化配置。
指标和监控检查可以帮助运维人员在运维期间监控项目运行情况;外部化配置可以是运维人员快速方便进行外部化配置和部署。 - 极少地代码生成和XML配置
Spring Boot框架内部已经实现了与Spring以及其他常用第三方库的整合连接,提供了默认最优化的整合配置,使用时基本上不需要额外生成配置代码和XML配置文件。Java config(Java配置类),方便查看和管理。
1.4 Spring Boot 原理分析
1.41 Spring Boot 依赖管理
spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
spring-boot-dependencies 底层源文件中通过标签对一些常用技术框架的依赖文件进行了统一版本管理
spring-boot-starter-web
依赖启动器提供对应场景的所有依赖并对它们进行统一的管理。
1.42 Spring Boot 自动配置
@SpringBootApplication注解是一个组合注解,包含@SpringBoot Configuration @EnableAutoConfiguration @ComponentScan 3个核心注解
注解解析
- 关键字
@interface - 元注解
注解 | 作用 |
---|---|
@Target | 定义注解的作用域 |
@Rentention | 定义注解的生命周期 |
documented | 使用javadoc生成文档时包含该信息 |
Inheried | 指定允许子类继承父类的注解 |
- 注解的属性
属性名就是方法名,属性值是方法返回值。
@SpringBootConfiguration
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration //该注解是Spring框架提供的,表示当前类是一个配置类(XML配置文件的注解表现形式)
@Indexed //SpringBootConfiguration注解的作用与Configuration相同,只是进行了重命名
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
@EnableAutoConfiguration注解
@EnableAutoConfiguration注解表示开启自动配置功能,该注解是Spring Boot框架最重要的注解,也是实现自动化配置的注解。
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage //自动配置包
@Import({
AutoConfigurationImportSelector.class}) //自动配置类扫描导入
public @interface EnableAutoConfiguration