SpringBoot依赖管理和自动配置(springboot自动配置原理详解)
依赖管理
我们打开SpringBoot项目的
pom.xml
文件,可以看到和之前的maven
项目几乎相同,但是同以往不一样的是,这里的依赖都是一个个starter
并没有显示具体引用了哪些jar
包,而且这里依赖了一个<parent>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> 复制代码
父项目依赖
点击进入父依赖中(
idea ctrl + 左击
), 还是没有具体依赖,再往上查看父依赖,最顶层我们看到了这里定义了大量的具体依赖,并且通过<properties>
定义了所有的依赖版本号。
这里涉及到maven的知识,在此不做详细介绍,感兴趣可以看看这里
版本控制
SpringBoot项目通过父依赖统一管理项目中所有的
jar
包版本,项目在引入依赖的时候就不需要具体指定版本了。而且当我们引入一个starter
的时候,会自动引入相关的jar
包,无需我们自己去一个个引入,考虑版本兼容问题,给我们整合第三方依赖带来了便捷。
总结
引入的
starter
的<parent>
中集中声明了项目中几乎所有依赖包以及版本号。具体使用时只需要直接引入依赖,不需要指定版本号,自动版本仲裁如需要引入父依赖中未指定版本的依赖,需要指定版本,并且如果在当前项目中指定版本,就近原则,会覆盖父依赖中的版本,以当前指定版本号为准
以
spring-boot-starter-xxx
命名为官方提供的starter
,而第三方机构提供的starter
一般命名为xxx-spring-boot-starter
自动配置
根据引入的
starter
,SpringBoot项目启动后会自动加载配置,引入web
开发的starter
,会自动配置好web
开发中的所有常见场景,比如tomcat
容器,以及字符编码,视图解析器。并且配置了默认的包扫描,自动扫描主程序所在包,这也是为什么我们不需要再向原来那样指定包扫描。当然我们也可以指定扫描指定的包@SpringBootApplication(scanBasePackages= "com.yang" )
或者@ComponentScan
指定扫描路径
以往
MVC
下自己手动配置的东西,在SpringBoot中,要么默认给我们配置好了,要么我们可以通过注解简单的完成相同的效果。非常的方便。
总结
自动配置了需要的场景容器
自动配置了包扫描结构(启动类所在包)
自动加载配置文件,生成配置对象
按需加载所有的配置项
具体场景可查看
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.3.2.RELEASE</version> <scope>compile</scope> </dependency> 复制代码
作者:申阳
链接:https://juejin.cn/post/7029582317895024653