springboot源码解读与原理分析_「SpringBoot框架」-
SpringBoot原理分析
⼀、起步依赖原理分析
在搭建SpringBoot环境的时候,在l中添加了两个依赖,对这两个依赖进⾏分析,分别是:
SpringBoot的起步依赖:spring-boot-starter-parent
web的起步依赖:spring-boot-starter-web
1、spring-boot-starter-parent
spring-boot-starter-parent 是Spring Boot的⽗级依赖,是⼀个特殊的starter,它⽤来提供相关的Maven默认依赖。使⽤它之后,常⽤的包依赖可以省去version标签。
咱们可以直接对源码进⾏分析,来看看源码,就拿上篇博⽂中搭建 SpringBoot 环境的代码,使⽤ idea 按住 Ctrl 点击 l 中的spring-boot-starter-parent
截取了部分源码,在这⾥,可以看到SpringBoot的继承关系:
SpringBoot 继承 spring-boot-starter-parent
spring-boot-starter-parent 继承 spring-boot-dependencies
【1】咱们可以进⼊ spring-boot-dependencies 看⼀看,按住 Ctrl 点击 spring-boot-dependencies,截取部分代码:
这些配置⾥⾯主要是定义⼀些坐标的版本、依赖管理、插件管理,这⾥会根据我们在spring-boot-starter-parent定义的版本来提供相应版本的匹配,这就很好的解决了Spring导⼊版本依赖冲突的问题,所以我们的 SpringBoot ⼯程继承 spring-boot-starter-parent 后已经具备版本锁定等配置了。
可以看出起步依赖的作⽤就是进⾏依赖的传递。springboot架构图
【2】在 spring-boot-starter-parent 中,还有⼀个地⽅咱们可以看⼀下,那就是资源引⼊:
可以看到,${basedir}/src/main/resources 表⽰资源的加载⽂件,资源⽂件包括下⾯三种格式的,也就是说,咱们在配置SpringBoot资源⽂件的时候都是以 application*.yml、application*.yaml、application*.properties⽂件格式
2、spring-boot-starter-web
spring-boot-starter-web 是web功能的起步依赖,导⼊了web功能的起步依赖后,可以不⽤导⼊Spring和SpringMVC的坐标,是因为
starter-web 将坐标打包了,同样,可以来看看源码,按住 Ctrl 点击 spring-boot-starter-web,截取部分代码
可以看到,spring-boot-starter-web就是将web开发要使⽤的spring-web、spring-webmvc等坐标进⾏了“打包”,这样我们的⼯程只要引⼊spring-boot-starter-web起步依赖的坐标就可以进⾏web开发了,同样体现了依赖传递的作⽤。
⼆、⾃动配置原理解析
⾃动配置其实就是将默认的配置⾃动加载进去,不需要我们去⼿动进⾏配置,依然是对源码进⾏分析,从mySpringBootApplication引导类开始:
1、@SpringBootApplication注解
⾸先是@SpringBootApplication注解,咱们按住 Ctrl 点击 SpringBootApplication,进⼊ SpringBootApplication 注解源码瞧⼀瞧:
在这⾥我们可以看到,有⼀些其他的注解,咱们挑⼀些重要的注解来进⾏分析:
【1】@SpringBootConfiguration 注解
咱们可以按住 Ctrl 点进去看
可以看到 @SpringBootConfiguration 注解上⾯有⼀个@Configuration 注解,既标注该类是 Spring 的⼀个配置类 ,其实,@SpringBootConfiguration 注解就相当于Configuration注解,⽤于标注该类是 Spring 的⼀个配置类,和 Spring 中的@Configuration 注解是⼀个意思
【2】@EnableAutoConfiguration 注解
@EnableAutoConfiguration 注解是 SpringBoot ⾃动配置功能开启 ,同样,咱们可以按住 Ctrl 点进去瞧瞧
可以看到,在上⾯有⼀个 @Import({AutoConfigurationImportSelector.class}) 注解配置,这是导⼊了AutoConfigurationImportSelector类,意思是⾃动配置导⼊选择器,咱们可以点进AutoConfigurationImportSelector类看看,截取部分源码:
图中框出来的表⽰加载某些配置,点进源码看⼀看:
protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
Listconfigurations=SpringFactoriesLoader.SpringFactoriesLoaderFactoryClass(),
return configurations;
}
其中,SpringFactoriesLoader.loadFactoryNames ⽅法的作⽤就是从META-INF/spring.factories⽂件中读取指定类对应的类名称列表,⽽这个⽂件就在当前类的包下⾯,咱们可以到看⼀看:
点进spring.factories⽂件,⾥⾯有关⾃动配置的配置信息:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论