热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

点击上方“Java指南者“关注, 星标或置顶一起成长免费送1024GB精品学习资源 源码结构代码在IDEA中打开后的整体目录结构如下图所示:可以看见整体的结构目录是比较清晰的,主要

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

免费送 1024GB 精品学习资源 

源码结构

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

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

可以看见整体的结构目录是比较清晰的,主要源码模块分为 spring-boot-project 和 spring-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 源码解析——源码模块功能分析》


推荐阅读
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 本文介绍了自学Vue的第01天的内容,包括学习目标、学习资料的收集和学习方法的选择。作者解释了为什么要学习Vue以及选择Vue的原因,包括完善的中文文档、较低的学习曲线、使用人数众多等。作者还列举了自己选择的学习资料,包括全新vue2.5核心技术全方位讲解+实战精讲教程、全新vue2.5项目实战全家桶单页面仿京东电商等。最后,作者提出了学习方法,包括简单的入门课程和实战课程。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • 本文介绍了如何使用MATLAB调用摄像头进行人脸检测和识别。首先需要安装扩展工具,并下载安装OS Generic Video Interface。然后使用MATLAB的机器视觉工具箱中的VJ算法进行人脸检测,可以直接调用CascadeObjectDetector函数进行检测。同时还介绍了如何调用摄像头进行人脸识别,并对每一帧图像进行识别。最后,给出了一些相关的参考资料和实例。 ... [详细]
author-avatar
男人32ABC_130
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有