前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文读懂Spring Boot各模块组件依赖关系

一文读懂Spring Boot各模块组件依赖关系

作者头像
微观技术
发布2020-08-20 15:05:44
2.8K0
发布2020-08-20 15:05:44
举报
文章被收录于专栏:微观技术微观技术

前言

spring boot 作为一款开箱即用的框架,在市场上有很高的流行度。但内部依赖错踪复杂,每个模块都有自己专属职责,同时又可以做为其他模块的补充,具有很强的扩展性。

各模块组件依赖图

核心模块

•spring-boot-dependencies

内部声明维护了68个 spring boot官方jar版本号,以及500多个三方jar包版本号

如果你不想采用spring-boot-starter-parent,但依然想使用其便利性,可以采用下面配置:

代码语言:javascript
复制
<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>会依赖这个包

代码语言:javascript
复制
 <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

过程:

代码语言:javascript
复制
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容器统一管理。

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微观技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档