转载

SpringBoot 源码解析——源码模块功能分析

点击上方 " Java指南者 "关注,  星标或置顶一起成长

免费送 1024GB 精品学习资源  

源码结构

代码在 IDEA 中打开后的整体目录结构如下图所示:

SpringBoot 源码解析——源码模块功能分析

可以看见整体的结构目录是比较清晰的,主要源码模块分为 spring-boot-projectspring-boot-tests 两个,其中第一个是源码模块,第二个是一些测试的子模块,其他的一些目录对于我们源码学习来说不太重要,这里就不做过多的讲解。

模块功能

spring-boot-project

先说说 spring-boot-project 模块吧,在这个 module 里面的子 module 分别是:

➜  spring-boot-project git:(v2.2.8.RELEASE) tree -L 2
.
├── spring-boot
├── spring-boot-actuator
├── spring-boot-actuator-autoconfigure
├── spring-boot-autoconfigure
├── spring-boot-cli
├── spring-boot-dependencies
├── spring-boot-devtools
├── spring-boot-docs
├── spring-boot-parent
├── spring-boot-properties-migrator
├── spring-boot-starters
│ ├── spring-boot-starter
│ ├── spring-boot-starter-activemq
│ ├── spring-boot-starter-actuator
│ ├── spring-boot-starter-amqp
│ ├── spring-boot-starter-aop
│ ├── spring-boot-starter-artemis
│ ├── spring-boot-starter-batch
│ ├── spring-boot-starter-cache
│ ├── spring-boot-starter-cloud-connectors
│ ├── spring-boot-starter-data-cassandra
│ ├── spring-boot-starter-data-cassandra-reactive
│ ├── spring-boot-starter-data-couchbase
│ ├── spring-boot-starter-data-couchbase-reactive
│ ├── spring-boot-starter-data-elasticsearch
│ ├── spring-boot-starter-data-jdbc
│ ├── spring-boot-starter-data-jpa
│ ├── spring-boot-starter-data-ldap
│ ├── spring-boot-starter-data-mongodb
│ ├── spring-boot-starter-data-mongodb-reactive
│ ├── spring-boot-starter-data-neo4j
│ ├── spring-boot-starter-data-redis
│ ├── spring-boot-starter-data-redis-reactive
│ ├── spring-boot-starter-data-rest
│ ├── spring-boot-starter-data-solr
│ ├── spring-boot-starter-freemarker
│ ├── spring-boot-starter-groovy-templates
│ ├── spring-boot-starter-hateoas
│ ├── spring-boot-starter-integration
│ ├── spring-boot-starter-jdbc
│ ├── spring-boot-starter-jersey
│ ├── spring-boot-starter-jetty
│ ├── spring-boot-starter-jooq
│ ├── spring-boot-starter-json
│ ├── spring-boot-starter-jta-atomikos
│ ├── spring-boot-starter-jta-bitronix
│ ├── spring-boot-starter-log4j2
│ ├── spring-boot-starter-logging
│ ├── spring-boot-starter-mail
│ ├── spring-boot-starter-mustache
│ ├── spring-boot-starter-oauth2-client
│ ├── spring-boot-starter-oauth2-resource-server
│ ├── spring-boot-starter-parent
│ ├── spring-boot-starter-quartz
│ ├── spring-boot-starter-reactor-netty
│ ├── spring-boot-starter-rsocket
│ ├── spring-boot-starter-security
│ ├── spring-boot-starter-test
│ ├── spring-boot-starter-thymeleaf
│ ├── spring-boot-starter-tomcat
│ ├── spring-boot-starter-undertow
│ ├── spring-boot-starter-validation
│ ├── spring-boot-starter-web
│ ├── spring-boot-starter-web-services
│ ├── spring-boot-starter-webflux
│ └── spring-boot-starter-websocket
├── spring-boot-test
├── spring-boot-test-autoconfigure
└── spring-boot-tools
├── spring-boot-antlib
├── spring-boot-autoconfigure-processor
├── spring-boot-configuration-docs
├── spring-boot-configuration-metadata
├── spring-boot-configuration-processor
├── spring-boot-gradle-plugin
├── spring-boot-loader
├── spring-boot-loader-tools
├── spring-boot-maven-plugin
└── spring-boot-test-support

整个子模块的结构是非常的清晰,几乎可以看 module 名称就知道该 module 的功能是什么了。

下面还是分别说下每个模块的功能:

  • spring-boot:Spring Boot 主要的库,提供了支持 Spring Boot 其他部分的功能

    • Spring Boot 主要的库,提供了支持 Spring Boot 其他部分的功能

    • 在 SpringApplication 类中提供了一个静态的 run 方法来启动程序,该类主要用来创建并且刷新 Spring容器 ApplicationContext
    • 带有可选容器的嵌入式 Web 应用程序(Tomcat,Jetty 或 Undertow)

    • 支持外部配置,这个指的是我们执行 java -jar xxx.jar 命令时可以带一些参数,比如执行 java -jar demo.jar --server.port=8888 来将应用端口修改为8888.
    • 内置了 ApplicationContext 默认的初始化程序,包括对敏感日志记录默认值的支持

  • spring-boot-actuator:它完全是一个用于暴露自身信息的模块,提供了一个监控和管理生产环境的模块,可以使用 http、jmx、ssh、telnet 等管理和监控应用。审计(Auditing)、 健康(health)、数据采集(metrics gathering)会自动加入到应用里面。

  • spring-boot-actuator-autoconfigure:Spring Boot Actuator 提供了额外的自动配置功能,可以在生产环境中实现可即时部署和支持的功能,从而装饰你的应用。例如,如果您正在编写 JSON Web 服务,那么它将提供服务器,安全性,日志记录,外部配置,管理端点,审计抽象等等功能。如果您想关闭内置功能,或者扩展或替换它们,它也会变得非常简单。

  • spring-boot-autoconfigure :Spring Boot 可以根据 classpath 的内容配置常用应用程序。@EnableAutoConfiguration 注解会触发 Spring 上下文的自动配置。自动配置会尝试推断用户可能需要哪些 bean。例如,如果 HSQLDB 在 classpath 下,并且用户没有配置任何其他的数据库连接,这时候 Auto-configuration 功能会自动注入一个基于内存的数据库连接到应用的 IOC 容器。
  • spring-boot-cli:Spring 命令行应用程序编译并运行 Groovy 源代码,使得可以编写少量代码就能运行应用程序。Spring CLI 也可以监视文件,当它们改变时自动重新编译并重新启动。

  • spring-boot-dependencies:该模块里面没有源码,只有所有依赖和插件的版本号信息。

  • spring-boot-devtools:该模块可以让 Spring Boot 应用支持热部署,提高开发者的开发效率,无需手动重启 Spring Boot 应用。

  • spring-boot-docs:

  • spring-boot-parent:该模块是其他项目的 parent,该模块的父模块是 spring-boot-dependencies。

  • spring-boot-properties-migrator:在 Spring Boot 2.x 中,许多配置属性被重新命名/删除,开发人员需要更新 application.properties/ application.yml 相应的配置。为了帮助你解决这一问题,Spring Boot 发布了一个新 spring-boot-properties-migrator 模块。一旦作为该模块作为依赖被添加到你的项目中,它不仅会分析应用程序的环境,而且还会在启动时打印诊断信息,而且还会在运行时为您暂时迁移属性。在您的应用程序迁移期间,这个模块是必备的,完成迁移后,请确保从项目的依赖关系中删除此模块

  • spring-boot-test:测试代码

  • spring-boot-test-autoconfigure:自动配置的测试代码

  • spring-boot-tools:该模块提供了一些程序开发时的功能,比如自动重启,以获得更便捷的程序开发体验。开发人员工具在被运行被编译打包的程序时会被自动禁用。其中包含了好多项:

    • org.springframework.boot.gradle.plugin:Gradle 的插件,里面依赖了 spring-boot-gradle-plugin 模块
    • spring-boot-antlib:为 Apache Ant 提供了基本的 Spring Boot 支持

    • spring-boot-autoconfigure-processor:Spring Boot 自动配置的核心类

    • spring-boot-configuration-docs:Spring Boot 配置文档

    • spring-boot-configuration-metadata:Spring Boot 配置元数据

    • spring-boot-configuration-processor:Spring Boot 配置的核心

    • spring-boot-gradle-plugin:在 Gradle 中提供了 Spring Boot 支持,可以打包成可执行 jar 或 war ,运行 Spring Boot 应用程序,并使用 spring-boot-dependencies 提供的依赖关系管理。它需要 Gradle 4.0 或更高版本

    • spring-boot-loader:通过自定义 jar 包结构,自定义类加载器,优雅的实现了嵌套 jar 资源的加载,通过打包时候重新设置启动类和组织 jar 结构,通过运行时设置自定义加载器来实现嵌套 jar 资源加载

    • spring-boot-loader-tools:spring-boot-loader 模块的工具模块

    • spring-boot-maven-plugin:Spring Boot Maven Plugin 在 Maven 中提供了 Spring Boot 支持,让您可以打包成可执行 jar 或 war 应用,并“就地”运行应用程序。要使用它,你必须使用 Maven 3.2(或更高版本)

    • spring-boot-test-support:测试相关

  • spring-boot-starters:这个模块有很多 starter 子模块,平时用的也是非常多的,Starters 可以作为一组依赖配置信息放在你项目的依赖配置中。从中您可以获得所需的所有 Spring 及其相关技术的一站式服务而无需搜索项目的配置方法并复制粘贴项目所需的依赖配置信息。比如,如果你想使用 Spring JPA 作为数据库访问中间层,仅仅需要将 spring-boot-starter-data-jpa 加入你的项目依赖中, 即可使用 Spring JPA。

SpringBoot 源码解析——源码模块功能分析 SpringBoot 源码解析——源码模块功能分析

spring-boot-tests

该模块主要是 spring boot 的项目测试,比如部署测试、集成测试、冒烟测试。

SpringBoot 源码解析——源码模块功能分析

记得很早看 Spring Boot 源码的时候,是还有一个 spring-boot-samples 模块的,现在没有了

SpringBoot 源码解析——源码模块功能分析

这些 sample 其实和冒烟测试中的是类似的,姑且就当是移动了一个目录。

关注我

关注我,Java 学习不迷路!

SpringBoot 源码解析——源码模块功能分析
原文  http://mp.weixin.qq.com/s?__biz=MzIxMTE0ODU5NQ==&mid=2650240545&idx=2&sn=b479455f2769c8e54c4528133e8b2ad7
正文到此结束
Loading...