一文读懂Spring Boot各模块组件依赖关系
前言
spring boot 作为一款开箱即用的框架,在市场上有很高的流行度。但内部依赖错踪复杂,每个模块都有自己专属职责,同时又可以做为其他模块的补充,具有很强的扩展性。
各模块组件依赖图
核心模块
•spring-boot-dependencies
内部声明维护了68个 spring boot官方jar版本号,以及500多个三方jar包版本号
如果你不想采用spring-boot-starter-parent
,但依然想使用其便利性,可以采用下面配置:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
•spring-boot-starter-parent
一般新建一个web工程,其pom.xml文件的<parent>
会依赖这个包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
缺点:采用单继承方式,所以限制了其固化Maven依赖(仅限于Spring Boot相关),如果想拥有自定义parent 或者依赖Spring Cloud生态。建议采用<dependencyManagement>
方式
•spring-boot-autoconfigure
为市场主流的开源框架初始化客户端的Bean实例,所以里面会对开源框架的二方包有依赖。
但又考虑到业务使用方可能只使用其中某几个开源系统,所以jar包依赖采用Optional
定义,表明该依赖只能在本项目中传递,不会传递到引用该项目的父项目中,父项目需要主动引用该依赖才行。
内部src/main/java
代码则通过@ConditionalOnClass
或@ConditionalOnWebApplication
扫描classpath是否存在对应的类,根据条件结果决定是否对当前的类配置加载并实例化。
start 组件列表
•spring boot官方包装的start组件,大约54个
地址列表:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-project/spring-boot-starters
下面是来自民间组织封装的组件:
•mybatis
组件名:mybatis-spring-boot-starter
地址:https://github.com/mybatis/spring-boot-starter
过程:
mybatis-spring-boot-autoconfigure 包:
<dependencies>
<!-- Compile dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<!-- Optional dependencies -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis.scripting</groupId>
<artifactId>mybatis-freemarker</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis.scripting</groupId>
<artifactId>mybatis-velocity</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.mybatis.scripting</groupId>
<artifactId>mybatis-thymeleaf</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- @ConfigurationProperties annotation processing (metadata for IDEs) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
说明:spring.factories 里面配置了启动类,借助 spring 框架提供的注解,来初始化一系列 mybatis 客户端的Bean实例,然后交由spring容器统一管理。
mybatis-spring-boot-starter 包:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
</dependencies>
说明:只是一层壳,将mybatis所依赖的组件全部汇总到一块,并遵循spring的规范,maven将包引入到工程后,即可开箱即用。
其它组件的封装原理类似。
•druid
组件名:druid-spring-boot-starter
地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
•dubbo
组件名:dubbo-spring-boot-starter
地址:https://github.com/apache/dubbo-spring-boot-project
•redisson
组件名:redisson-spring-boot-starter
地址:https://github.com/redisson/redisson/tree/master/redisson-spring-boot-starter
•rocketmq
组件名:rocketmq-spring-boot-starter
地址:https://github.com/ThierrySquirrel/rocketmq-spring-boot-starter
•grpc
组件名:grpc-spring-boot-starter
地址:https://github.com/yidongnan/grpc-spring-boot-starter
精彩文章: