如何分析SpringBoot源码模块及结构?--SpringBoot源码(二)
2020/2/24 17:03:03
本文主要是介绍如何分析SpringBoot源码模块及结构?--SpringBoot源码(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE
1 前言
本篇接 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一)。
前面搭建好了自己本地的SpringBoot源码调试环境后,此时我们不要急着下手进入到具体的源码调试细节中,刚开始阅读源码,此时我们一定要对项目结构等有一个整体的认识,然后再进行源码分析调试。推荐阅读下笔者之前写的的分析开源项目源码,我们该如何入手分析?一文,干货满满哦。
2 SpringBoot源码模块一览
我们先来对SpringBoot的源码模块来一个大致的了解,如下图:
从上图可以看到,主要有以下四个模块:- spring-boot-project:整个SpringBoot框架全部功能在这个模块实现,SpringBoot项目95%的代码都在这里实现,源码总共有25万行左右。
- Spring-boot-samples:这个是SpringBoot给小伙伴们赠送的福利,里面包含了各种各样使用SpringBoot的简单demo,我们调试阅读源码的时候可以充分利用该模块。
- Spring-boot-sample-invoker:这个模块应该是跟sample模块有关,注意根pom.xml中有这么一句话:
Samples are built via the invoker plugin
,该模块无代码。 - Spring-boot-tests:这个模块SpringBoot的测试模块,跟部署测试和集成测试有关。
因为SpringBoot的全部功能在spring-boot-project模块实现,因此下面重点来介绍下 spring-boot-project 模块。
3 spring-boot-project源码模块详解
先来看下spring-boot-project整体模块结构,如下图,然后我们再逐个来介绍:
1) spring-boot-parent
这个模块没有代码,是spring-boot模块的父项目,被其他子模块继承。
2) spring-boot
这个模块是SpringBoot项目的核心,可以说一些基础核心的功能都在这里实现,为SpringBoot的其他模块组件功能提供了支持,主要包括以下核心功能:
SpringApplication
类,这个是SpringBoot的启动类,提供了一个静态的run
方法来启动程序,该类主要用来创建并且刷新Spring容器ApplicationContext
.- 支持选择不同的容器比如Tomcat,Jetty等来作为应用的嵌入容器,这个是SpringBoot的新特性之一。
- 外部配置支持,这个指的是我们执行
java -jar xxx.jar
命令时可以带一些参数,比如执行java -jar demo.jar --server.port=8888
来将应用端口修改为8888. - 该模块内置了一些SpringBoot启动时的生命周期事件和一些容器初始化器(
ApplicationContext
initializers),来执行一些SpringBoot启动时的初始化逻辑。
3) spring-boot-autoconfigure
这个模块跟SpringBoot的自动配置有关,也是SpringBoot的新特性之一。比如SpringBoot能基于类路径来自动配置某个项目模块,自动配置最为关键的注解是@EnableAutoConfiguration
,这个注解能触发Spring上下文的自动配置。另外一个重要的注解是@Conditional
。
举个栗子,若
HSQLDB
在项目的类路径中,且我们没有配置任何其他数据库的连接,此时自动配置就会自动根据类路径来创建相应的bean
。
除了根据类路径来进行自动配置外,还有根据容器中是否存在某个bean等方式来进行自动配置,这里不会进入到具体细节中。
4) spring-boot-starters
这个模块是跟SpringBoot的起步依赖有关,也是SpringBoot的新特性之一。SpringBoot通过提供众多起步依赖降低项目依赖的复杂度。起步依赖其实就是利用maven项目模型将其他相关的依赖给聚合起来,里面各种依赖的版本号都给定义好,避免用户在引入依赖时出现各种版本冲突,方便了我们的使用。
举个栗子,我们要用到activemq时,此时可以直接引入
spring-boot-starter-activemq
起步依赖即可,若SpringBoot官网或第三方组织没有提供相应的SpringBoot起步依赖时,此时我们可以进行定制自己的起步依赖。
注意,该模块没有代码,主要是通过maven的pom.xml来组织各种依赖。
5) spring-boot-cli
Spring Boot CLI是一个命令行工具,如果您想使用Spring快速开发,可以使用它。它允许您运行Groovy脚本,这意味着您有一个熟悉的类似Java的语法,而没有那么多样板代码。您还可以引导一个新项目或编写自己的命令。
6) spring-boot-actuator
这个跟SpringBoot的监控有关,也是SpringBoot的新特性之一。可以通过HTTP端点或JMX等来管理和监控应用。审计、运行状况和度量收集可以自动应用到应用程序。这个监控模块是开箱即用的,提供了一系列端点包括HealthEndpoint
, EnvironmentEndpoint
和BeansEndpoint
等端点。
7) spring-boot-actuator-autoconfigure
这个模块为监控模块提供自动配置的功能,通常也是根据类路径来进行配置。比如Micrometer
存在于类路径中,那么将会自动配置MetricsEndpoint
。
8) spring-boot-test
这个模式是spring-boot的跟测试有关的模块,包含了一些帮助我们测试的核心类和注解(比如@SpringBootTest
)。<
这篇关于如何分析SpringBoot源码模块及结构?--SpringBoot源码(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27JavaScript面试真题详解与解答
- 2024-12-27掌握JavaScript大厂面试真题:新手入门指南
- 2024-12-27JavaScript 大厂面试真题详解与解析
- 2024-12-26网络攻防资料入门教程
- 2024-12-26SQL注入资料详解:入门必读教程
- 2024-12-26初学者指南:数据库服务漏洞项目实战
- 2024-12-26网络安全项目实战:新手入门指南
- 2024-12-26网络攻防项目实战入门教程
- 2024-12-26信息安全项目实战:从入门到初步应用
- 2024-12-26SQL注入项目实战:初学者指南