专栏首页微观技术一文读懂Spring Boot各模块组件依赖关系

一文读懂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

本文分享自微信公众号 - 微观技术(weiguanjishu),作者:TomGE

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速上手Spring-Data-Redis

    Spring Data Redis 是 Spring Data的一个子项目,主要用于操作redis,和Spring 生态结合的很好,它提供了低级别(RedisT...

    用户7676729
  • 最接地气的负载均衡算法(含代码)

    实现比较简单,在请求量远超可用服务节点数量的情况下,各个服务节点被访问的概率基本相同,主要应用在各个服务节点的性能差异不大的情况下。

    用户7676729
  • 一些Redis很实用的工作技巧

    常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识

    用户7676729
  • 利用 Spring Boot Admin 进行项目监控管理

    Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spring Boot 应用程序。应用程序通过 http 的方式注册到 Sp...

    烂猪皮
  • springboot 非parent方式搭建

    非parent 方式 推荐使用这种方式。 这样就可以使子项目使用 parent 标签了。 这种方式需要两次步骤: 1.paretn 项目配置 2.子项目配置

    潇洒
  • 『互联网架构』软件架构-springcloud邮件监控和总结(106)

    PS:Spring Cloud从设计之初就考虑了绝大多数互联网公司架构演化所需的功能,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。这些功能...

    IT故事会
  • SpringBoot:企业常用的starter

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而...

    Java团长
  • SpringBoot之依赖分析 原

                                                       图1 SpringBoot的模块继承图

    克虏伯
  • Spring Boot2.0 整合mybatis、分页插件、druid

    本文主要是针对SpringBoot2.0.2版本,实现整合mybatis、分页插件、druid等组件,实现完整的web服务,提供restful风格接口。

    kinbug [进阶者]
  • SpringBoot之Admin监控系统

    前言:生产环境用springboot,时常需要监控项目的情况,官方也提供了一些监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他...

    王念博客

扫码关注云+社区

领取腾讯云代金券