博主是Java交流君羊:723749901
学完课程你会收获什么?
彻底理解SpringBoot自动化配置
应对企业面试SpringBoot自动化配置热点问题
SpringBoot 设计上的哲学
- 约定优于配置(注解)
- 开箱即用(Starter +自动化配置)
- 独立的web 应用(tomcat|jetty)
- 独特的Parent 依赖()
- 生产级别应用监控
SpringBoot 自动化配置是如何实现的?
-
认识Starter坐标体系
Starter 坐标分类(官方 第三方)
Starter 坐标查找:官方文档,Mvn中央仓库 ,国内Aliyun 仓库服务
Maven 坐标的传递性依赖(Spring-Context默认自动依赖 Spring-Beans,Spring-Core,Spring-EL,Spring-AOP)
统一的版本控制( 标签 指定SpringBoot 版本)
-
SpringBoot 引入Starter 坐标后,内部的配置类是如何生效的?
2.1. 元注解&组合注解
2.2.条件化注解
2.3.@EnableXXX & @Import
2.4.SpringBoot 加载的配置类在哪里(MATAINFO/spring.factories)
Starter 坐标
Jar演进过程
如何正确理解Starter 坐标?
理解Starter的正确姿势
Starter坐标分类
-
部分官方Starter坐标
-
第三方Starter坐标
传递性依赖
统一的版本号
引入的Starter 坐标不用关注其坐标的版本号得益于Parent坐标的依赖,工程中引入标签,通过依赖依赖父工程来达到坐标版本的统一控制
精简的注解-@SpringBootApplication
元注解&组合注解
元注解
元注解由java API提供,用来定义注解的注解
-
@Target
| 声明级别 | 描述 | | :-------------------------: | :--------------------------------: | | ElemenetType.CONSTRUCTOR | 构造器声明 | | ElemenetType.FIELD | 字段 | | ElemenetType.LOCAL_VARIABLE | 局部变量声明 | | ElemenetType.METHOD | 方法声明 | | ElemenetType.PACKAGE | 包声明 | | ElemenetType.PARAMETER | 参数声明 | | ElemenetType.TYPE | 类,接口(包括注解类型)或enum声明 |
-
@Retention
| 级别 | 描述 | | :-------------------------: | :----------------------------------------------------------: | | RetentionPolicy.SOURCE | 注解将被编译器丢弃 | | RetentionPolicy.CLASS | 注解在class文件中可用,但会被VM丢弃 | | RetentionPolicy.RUNTIME | VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。 |
-
@Documented
javac 生成文档保留
-
@Inherited
注解是否允许继承
组合注解
由多个注解注解的注解,多个注解组合到一起定义一个新的注解。Spring ,SpringBoot这块有大量组合注解
条件化注解
条件注解就是可以根据不同的条件来做出不同的事情。SpringBoot为了满足不同条件下配置类生效,采用条件注解方式来动态控制配置类生效方式。
部分条件话注解列表:
| 注解 | 功能 |
|---|---|
| @ConditionalOnBean | 配置某个特定Bean |
| @ConditionalOnClass | classpath下存在指定类 |
| @ConditionalOnMissingClass | classpath下缺少指定类 |
| @ConditionalOnMissingBean | 没有配置特定Bean |
| @ConditionalOnProperty | 指定的配置属性要有明确值 |
| @ConditionalOnWebApplication | Web程序 |
| @ConditionalOnNotWebApplication | 非Web程序 |
以RedisAutoConfiguration、JdbcTemplateAutoConfiguration为例
自动化开启@EnableXXX与@Import
@EnableXxx
顾名思义,开启xxx功能,SpringBoot中大量采用该注解来自动化开启某一项环境配置,通常@EnableXxx 注组合@Import 注解来实现某个配置功能的自动开启,看几个栗子
@import导入
用于导入指定的类,而该被导入的类一般为配置类(import标签类似)。其导入配置类的方式常见的有三种
-
直接引入配置类
-
根据条件选择配置类
@Import 中指定的类一般是以 Selector 结尾, 一般都会实现 ImportSelector 接口, 表示当前类会根据条件选择不同的配置类导入。
-
动态注册Bean
指定的类一般是以 Registrar 结尾,表示在代码运行过程中,其使用到了哪个配置类,则系统会自动导入该配置类。
@SpringBootApplication(组合注解 组合自动化配置、扫描器、配置类)
自动化配置类在哪?
注解定义
AutoConfigurationImportSelector加载配置类
总结
博主是Java交流君羊:723749901
博主是Java交流君羊:723749901
学完课程你会收获什么?
彻底理解SpringBoot自动化配置
应对企业面试SpringBoot自动化配置热点问题
SpringBoot 设计上的哲学
- 约定优于配置(注解)
- 开箱即用(Starter +自动化配置)
- 独立的web 应用(tomcat|jetty)
- 独特的Parent 依赖()
- 生产级别应用监控
SpringBoot 自动化配置是如何实现的?
-
认识Starter坐标体系
Starter 坐标分类(官方 第三方)
Starter 坐标查找:官方文档,Mvn中央仓库 ,国内Aliyun 仓库服务
Maven 坐标的传递性依赖(Spring-Context默认自动依赖 Spring-Beans,Spring-Core,Spring-EL,Spring-AOP)
统一的版本控制( 标签 指定SpringBoot 版本)
-
SpringBoot 引入Starter 坐标后,内部的配置类是如何生效的?
2.1. 元注解&组合注解
2.2.条件化注解
2.3.@EnableXXX & @Import
2.4.SpringBoot 加载的配置类在哪里(MATAINFO/spring.factories)
Starter 坐标
Jar演进过程
如何正确理解Starter 坐标?
理解Starter的正确姿势
Starter坐标分类
-
部分官方Starter坐标
-
第三方Starter坐标
传递性依赖
统一的版本号
引入的Starter 坐标不用关注其坐标的版本号得益于Parent坐标的依赖,工程中引入标签,通过依赖依赖父工程来达到坐标版本的统一控制
精简的注解-@SpringBootApplication
元注解&组合注解
元注解
元注解由java API提供,用来定义注解的注解
-
@Target
| 声明级别 | 描述 | | :-------------------------: | :--------------------------------: | | ElemenetType.CONSTRUCTOR | 构造器声明 | | ElemenetType.FIELD | 字段 | | ElemenetType.LOCAL_VARIABLE | 局部变量声明 | | ElemenetType.METHOD | 方法声明 | | ElemenetType.PACKAGE | 包声明 | | ElemenetType.PARAMETER | 参数声明 | | ElemenetType.TYPE | 类,接口(包括注解类型)或enum声明 |
-
@Retention
| 级别 | 描述 | | :-------------------------: | :----------------------------------------------------------: | | RetentionPolicy.SOURCE | 注解将被编译器丢弃 | | RetentionPolicy.CLASS | 注解在class文件中可用,但会被VM丢弃 | | RetentionPolicy.RUNTIME | VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。 |
-
@Documented
javac 生成文档保留
-
@Inherited
注解是否允许继承
组合注解
由多个注解注解的注解,多个注解组合到一起定义一个新的注解。Spring ,SpringBoot这块有大量组合注解
条件化注解
条件注解就是可以根据不同的条件来做出不同的事情。SpringBoot为了满足不同条件下配置类生效,采用条件注解方式来动态控制配置类生效方式。
部分条件话注解列表:
| 注解 | 功能 |
|---|---|
| @ConditionalOnBean | 配置某个特定Bean |
| @ConditionalOnClass | classpath下存在指定类 |
| @ConditionalOnMissingClass | classpath下缺少指定类 |
| @ConditionalOnMissingBean | 没有配置特定Bean |
| @ConditionalOnProperty | 指定的配置属性要有明确值 |
| @ConditionalOnWebApplication | Web程序 |
| @ConditionalOnNotWebApplication | 非Web程序 |
以RedisAutoConfiguration、JdbcTemplateAutoConfiguration为例
自动化开启@EnableXXX与@Import
@EnableXxx
顾名思义,开启xxx功能,SpringBoot中大量采用该注解来自动化开启某一项环境配置,通常@EnableXxx 注组合@Import 注解来实现某个配置功能的自动开启,看几个栗子
@import导入
用于导入指定的类,而该被导入的类一般为配置类(import标签类似)。其导入配置类的方式常见的有三种
-
直接引入配置类
-
根据条件选择配置类
@Import 中指定的类一般是以 Selector 结尾, 一般都会实现 ImportSelector 接口, 表示当前类会根据条件选择不同的配置类导入。
-
动态注册Bean
指定的类一般是以 Registrar 结尾,表示在代码运行过程中,其使用到了哪个配置类,则系统会自动导入该配置类。
@SpringBootApplication(组合注解 组合自动化配置、扫描器、配置类)
自动化配置类在哪?