说明:基于atguigu学习笔记。部分内容涉及上一章节,请参考以下链接。
依赖管理
自动版本仲裁
在上一节创建Spring Boot项目时,看到,引入了一个父项目。如下:
1 | < parent >< groupid >org.springframework.boot</ groupid >< artifactid >spring-boot-starter-parent</ artifactid >< version >2.3.4.RELEASE</ version ></ parent > |
父项目的主要作用是依赖管理。父项目已经声明了很多需要的依赖及其版本,子项目如果继承了父项目,则不需要再声明版本号(也称自动版本仲裁)。除非你不需要父项目的版本号。
点击查看父项目,可以看到,还有一个父项目是spring-boot-dependencies。如下:
1 | < parent >< groupid >org.springframework.boot</ groupid >< artifactid >spring-boot-dependencies</ artifactid >< version >2.7.0</ version ></ parent > |
再点进去看到这个父项目维护了很多依赖的版本,如下:
1 | < properties >< activemq.version >5.16.5</ activemq.version >< antlr2.version >2.7.7</ antlr2.version >< appengine-sdk.version >1.9.96</ appengine-sdk.version >< artemis.version >2.19.1</ artemis.version >< aspectj.version >1.9.7</ aspectj.version >< assertj.version >3.22.0</ assertj.version >< atomikos.version >4.0.6</ atomikos.version >< awaitility.version >4.2.0</ awaitility.version >< build-helper-maven-plugin.version >3.3.0</ build-helper-maven-plugin.version >< byte-buddy.version >1.12.10</ byte-buddy.version >< cache2k.version >2.6.1.Final</ cache2k.version >< caffeine.version >2.9.3</ caffeine.version >< cassandra-driver.version >4.14.1</ cassandra-driver.version >< classmate.version >1.5.1</ classmate.version >< commons-codec.version >1.15</ commons-codec.version >< commons-dbcp2.version >2.9.0</ commons-dbcp2.version >< commons-lang3.version >3.12.0</ commons-lang3.version >< commons-pool.version >1.6</ commons-pool.version >< commons-pool2.version >2.11.1</ commons-pool2.version >< couchbase-client.version >3.3.0</ couchbase-client.version >< db2-jdbc.version >11.5.7.0</ db2-jdbc.version >< dependency-management-plugin.version >1.0.11.RELEASE</ dependency-management-plugin.version >< derby.version >10.14.2.0</ derby.version >< dropwizard-metrics.version >4.2.9</ dropwizard-metrics.version >< ehcache.version >2.10.9.2</ ehcache.version >< ehcache3.version >3.10.0</ ehcache3.version >< elasticsearch.version >7.17.3</ elasticsearch.version >< embedded-mongo.version >3.4.5</ embedded-mongo.version ></ properties > |
如果不想要父项目的版本,引入依赖时可以自己定义版本号,如下:
1 | < properties >< mysql.version >5.1.43</ mysql.version ></ properties > |
starter启动器
上个章节,引入依赖时,只引入了spring-boot-starter-web这一个依赖。像这种spring-boot-starter-* 的依赖就是start启动器。他是一种场景的所有依赖集合描述,比如spring-boot-starter-web就是web开始所需要的所有依赖的集合描述。只要引入这一个依赖,就会把web开发场景所需要的依赖全都引入。
只要引入starter,这个场景的所有常规需要的依赖都自动引入。
注意像这种spring-boot-starter-格式的启动器一般是官方提供的。也可以自己创建,官方建议,自己创建的格式是-spring-boot-starter,比如很多第三方提供的简化开发的场景启动器。
自动配置
上面我们看到,当引入spring-boot-starter-web启动器的时候,spring boot会自动帮我们做很多配置。
1.自动引入Tomcat依赖并配好Tomcat。
2.自动配好SpringMVC: 引入并配置好SpringMVC全套组件。
3.自动配好Web常见功能,如:字符编码问题。
4.配置好默认的包结构: 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来, 想要改变扫描路径,在@SpringBootApplication注解里使scanBasePackages属性指定,或者使用@ComponentScan注解。
@SpringBootApplication注解源码可以看到,@SpringBootApplication注解相当于以下3个注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan(“com.example”)
5.各种配置分配了默认值
6.按需加载所有自动配置项: 引入了哪些场景,这个场景的自动配置才会开启。SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面。
到此这篇关于SpringBoot浅析依赖管理与自动配置概念与使用的文章就介绍到这了,更多相关SpringBoot依赖管理内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!