Spring Boot自动配置原理

16 篇文章 1 订阅
3 篇文章 0 订阅


一、SpringBoot概述

SpringBoot是搭建应用的手脚架,由Spring公司的核心团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突等问题得到了很好的解决

官方学习参考文档:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/

SpringBoot的特点:
1、 快速创建独立的Spring应用
2、 提供固定的启动器依赖(启动器即Spring Boot提供的一个jar包)去简化组件配置,通过自己设置参数(.properties或.yml的配置文件),实现快速使用的效果
3、 提供了一些大型项目中常见的非功能性特性,如内嵌服务器(如tomcat、jetty、undertow)、安全、指标,健康检测、外部化配置等
4、 自动配置Spring和其它有需要的第三方依赖,无需 XML 配置

二、SpringBoot:启动器&自动配置

Spring Boot的核心:启动器&自动配置原理
在这里插入图片描述

总结:springBoot在启动过程当中会加载META-INF/spring.factories文件,文件中包含了所有的自动配置类,自动配置类上有一个条件注解@ConditionalOnClass,必须满足这个条件注解,配置类才生效。只要加入相关的启动器依赖,条件注解就会生效,配置类就生效了

官方启动器介绍: https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/using-boot-build-systems.html#using-boot-starter

Spring Boot启动器的作用
● 配置一个启动器它会把整合这个框架或模块的依赖全部导入
● 每一个启动器都有一个自动配置类,实现自动整合Spring
● 每一个启动器都有一个配置属性类,提供了默认整合的属性配置

自动配置原理

1. 首先来自启动类的main方法

特别的两个地方:
注解: @SpringBootApplication 【重点】
run方法: SpringApplication.run() 运行spring应用(创建spring容器)

2. @SpringBootApplication注解

相当于以下三个注解的组合:
@SpringBootConfiguration 【作用: 定义配置类】
@EnableAutoConfiguration 【作用: 启用自动配置】
@ComponentScan 【作用: 组件扫描】

注解说明
注解@EnableAutoConfiguration,告诉SpringBoot基于你所添加的依赖,去“猜测”你想要如何配置Spring。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖。此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!
注解@ComponentScan,配置组件扫描的指令。提供了类似与context:component-scan
标签的作用通过basePackageClasses或者basePackages属性来指定要扫描的包。如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包
在这里插入图片描述

3. 自动配置实现流程

SpringApplication在运行Spring应用时,是通过SpringFactoriesLoader的loadSpringFactories()方法,初始化Spring工厂实例。
在这里插入图片描述
META-INF/spring.factories工厂配置文件
在这里插入图片描述
加载该文件,判断对应的启动器是否导入,如果导入就创建实例,自动注入默认属性
在这里插入图片描述
这个key所对应的值,就是所有的自动配置类,可以在当前的jar包中找到这些自动配置类:
在这里插入图片描述
每个包都有一个XxxAutoConfiguration配置类,都是一个基于纯注解的配置类,是各种框架整合的代码
在这里插入图片描述
该自动配置类,如果有默认属性,在该包下就会有一个XxxProperties属性类:
在这里插入图片描述

配置属性介绍
Spring Boot为所有的启动器提供了默认的属性配置,如果我们需要修改就必须要知道哪些属性是属于哪些启动器的默认配置。

官方属性配置介绍: https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#appendix

配置属性流程
从官方文档中找对应的属性,是件很麻烦的事情,因为属性太多,也不知道到底是哪个自动配置类的属性。
配置步骤:
第一步:配置一个自动配置类的属性,先到spring-boot-autoconfigure-2.1.6.RELEASE.jar找到对应的模块
在这里插入图片描述
第二步:如果该自动配置类有可以配置的属性,那么对应的整合模块中一定有一个XxxProperties属性类,在里面找可以配置的属性
在这里插入图片描述
第三步:在resources目录下的application.properties或application.yml文件里面可以修改 XxxProperties类中默认的属性
在这里插入图片描述

小结

Spring Boot自动配置原理:
1、 SpringApplication会寻找 META-INF/spring.factories 文件,读取其中以EnableAutoConfiguration 为key的所有类的名称, 这些类就是提前写好的自动配置类
2、 这些类都声明了@Configuration注解,并且通过@Bean注解提前配置了我们所需要的一切实例,完成自动配置
3、 这些配置类不一定全部生效,因为有@ConditionalOn注解,满足一定条件才会生效。(类存在条件)
4、 我们可以通过配置application.yml或application.properties文件,来覆盖自动配置中的属性

Spring Boot开发两个重点:
1、 找Spring Boot提供的starter启动器
2、 配置属性覆盖starter启动器中自动配置类的默认属性


总结

springBoot在启动过程当中会加载META-INF/spring.factories文件,文件中包含了所有的自动配置类,自动配置类上有一个条件注解@ConditionalOnClass,必须满足这个条件注解,配置类才生效。只要加入相关的启动器依赖,条件注解就会生效,配置类就生效了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值