1. 概述
本文主要分享 Spring Boot 的项目结构。
希望通过本文能让胖友对 Spring Boot 的整体项目有个简单的了解。
2. 代码统计
这里先分享一个小技巧。笔者在开始源码学习时,会首先了解项目的代码量。
第一种方式,使用 IDEA Statistic 插件,统计整体代码量。
我们可以粗略的看到,总的代码量在 268485 行。这其中还包括单元测试,示例等等代码。
所以,不慌。特别是 Spring 项目的代码,单元测试覆盖是超级全面的。
第二种方式,使用 Shell 脚本命令逐个 Maven 模块统计 。
一般情况下,笔者使用 find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l
。这个命令只过滤了部分注释,所以相比 IDEA Statistic 会偏多。
当然,考虑到准确性,胖友需要手动 cd
到每个 Maven 项目的 src/main/java
目录下,以达到排除单元测试的代码量。
统计完后,艿艿有点慌。哈哈哈哈。
3. spring-boot-project 项目
spring-boot-project
项目,Spring Boot 的代码实现,大概在 20W 代码左右。当然,实际上我们并不需要看完全部。艿艿自己的话,也只会选择关注部分的看看,并且写成源码解析。所以啊,尾随艿艿,不要方。
3.1 spring-boot 模块
spring-boot
模块,Spring Boot 的核心实现,大概在 4W 代码左右。提供了如下功能:
-
在
org.springframework.boot.SpringApplication
类,提供了大量的静态方法,可以很容易运行一个独立的 Spring 应用程序。是不是超级熟悉。
-
带有可选容器的嵌入式 Web 应用程序(Tomcat、Jetty、Undertow) 的支持。
在
org.springframework.boot.web
包下实现。 -
边界的外部配置支持。
- … 省略其它。
感兴趣的胖友,可以自己先简单翻翻每个
package
包,基本每个包下,都是对每个功能的支持。例如说,web
支持 Web 服务器,jdbc
支持 JDBC 功能,task
支持调度任务,以及等等。
3.2 spring-boot-autoconfigure 模块
spring-boot-actuator-autoconfigure
模块,大概 4W代码左右。spring-boot-autoconfigure
可以根据类路径的内容,自动配置大部分常用应用程序。通过使用 org.springframework.boot.autoconfigure.@EnableAutoConfiguration
注解,会触发 Spring 上下文的自动配置。
这里的大部分,指的是常用的框架。例如说,Spring MVC、Quartz 等等。也就是说,如果
spring-boot-actuator-autoconfigure
模块,暂未提供的框架,需要我们自己去实现对应框架的自动装配。
这个模块的代码,必须要看,没得商量。
所以到此处为止,我们已经看到对我们来研究 Spring Boot 最最最中航要的两个模块:spring-boot
和 spring-boot-autoconfigure
,一共是 9W 行代码左右。
3.3 spring-boot-actuator 模块
spring-boot-actuator
模块,大概 2W 行代码左右。正如其模块的英文 actuator ,它完全是一个用于暴露应用自身信息的模块:
- 提供了一个监控和管理生产环境的模块,可以使用 http、jmx、ssh、telnet 等管理和监控应用。
- 审计(Auditing)、 健康(health)、数据采集(metrics gathering)会自动加入到应用里面。
一般情况下,我们可以不看这块代码的代码。
如果没有使用过 spring-boot-actuator
的胖友,可以看看下面两篇文章:
- 《一起来学 SpringBoot 2.x | 第十四篇:强大的 Actuator 服务监控与管理》
- 《一起来学 SpringBoot 2.x | 第十五篇:actuator 与 spring-boot-admin 可以说的秘密》
3.4 spring-boot-actuator-autoconfigure 模块
spring-boot-actuator-autoconfigure
模块,大概 1W7 行代码左右。它提供了 spring-boot-actuator
的自动配置功能。
一般情况下,我们可以不看这块代码的代码。
3.5 spring-boot-starters 模块
spring-boot-starters
模块,它不存在任何的代码,而是提供我们常用框架的 Starter 模块。例如:
-
spring-boot-starter-web
模块,提供了对 Spring MVC 的 Starter 模块。 -
spring-boot-starter-data-jpa
模块,提供了对 Spring Data JPA 的 Starter 模块。
而每个 Starter 模块,里面只存在一个 pom
文件,这是为什么呢?简单来说,Spring Boot 可以根据项目中是否存在指定类,并且是否未生成对应的 Bean 对象,那么就自动创建 Bean 对象。因为有这样的机制,我们只需要使用 pom
文件,配置需要引入的框架,就可以实现该框架的使用所需要的类的自动装配。
当然,正如我们在 「spring-boot-autoconfigure 模块」 所提到的,如果不支持的框架,需要自己实现对应的 autoconfigure 功能。举个例子,Dubbo 框架并未在
spring-boot-autoconfigure
模块实现自动装配,所以 Dubbo 团队提供了dubbo-spring-boot-project
。
相关推荐
**Spring Boot创建与运行项目详解** Spring Boot是Java开发领域中的一个热门框架,它通过简化配置和自动装配,使得创建和运行Spring应用变得更加容易。在本篇内容中,我们将深入探讨如何利用Spring Boot来创建和...
本示例“spring boot整合JPA——demo”将演示如何在Spring Boot项目中配置和使用JPA。 首先,我们需要理解Spring Boot与JPA的关系。Spring Boot是基于Spring框架的快速开发工具,它通过自动化配置减少了常规设置...
深入学习spring boot 懂得各个标签,注解的用途和原理
《果子学院Spring Boot源码解析》是一套深入学习Spring Boot源码的教程,旨在帮助开发者深入了解这个流行的Java开发框架的内部工作机制。Spring Boot简化了Java应用的初始搭建以及开发过程,它集成了大量常用的第三...
例如,自动配置(Auto-Configuration)是Spring Boot的一项关键特性,它能根据项目中引入的依赖来自动配置相应的bean。在源码中,你可以看到`@EnableAutoConfiguration`注解以及相关的`META-INF/spring.factories`...
通过源码分析,开发者可以更好地理解Spring Boot的自动装配、启动流程以及如何自定义启动器。Spring Boot的自动装配原理涉及到Spring Boot的核心特性,它简化了基于Spring的应用开发,通过自动配置减少了大量的配置...
《Spring Boot实战派》源码提供了丰富的学习材料,旨在帮助开发者深入理解并...通过分析《Spring Boot实战派》源码,读者不仅可以了解上述技术点,还能学习到如何在实际项目中应用这些技术,提升开发效率和代码质量。
下面,我们将深入探讨Spring Boot的源码,揭示其内部工作原理。 1. **自动配置**:Spring Boot的自动配置是其核心特性之一。在`spring-boot-autoconfigure`模块中,通过条件注解(如`@ConditionalOnClass`, `@...
基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 ...
java毕业设计——基于spring boot的音乐播放网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的音乐播放网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的音乐播放网站设计与...
通过对这个项目源码的探索和实践,开发者不仅可以掌握Gradle的基本用法,还能深入了解Spring Boot的结构和工作原理,提升项目构建和管理的能力。通过阅读源码并动手实践,你可以更好地理解这些概念,并将它们应用到...
基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring ...
此外,Spring Boot的starter项目结构值得探究。每个Starter都有一个主POM,引入了必要的依赖,为开发者提供了便捷的一站式解决方案。例如,`spring-boot-starter-web`包含了Spring Web、Spring MVC和Tomcat等核心...
本学习资源包“java maven工程 spring boot 学习源码”提供了一个可以直接运行的示例工程,有助于深入理解Spring Boot和Maven的结合使用。 首先,我们需要了解Spring Boot的核心特性。Spring Boot通过内嵌的Servlet...
通过深入阅读和分析Spring Boot 2.7.0的源码,我们可以了解到Spring Boot是如何实现其核心特性的,以及如何利用Spring Framework进行扩展和定制。同时,这也有助于我们更好地利用Spring Boot进行微服务开发,提高...
Spring Boot是Java开发领域的一款非常流行的框架,它简化了基于Spring的应用程序开发流程。Spring Boot 2.6.2是该框架...通过分析源码,我们可以学习到Spring框架的最佳实践,以及如何设计和实现一个健壮的微服务架构。
java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理...
通过这套源码的学习,开发者可以掌握如何在实际项目中整合Vue.js和Spring Boot,构建高效、稳定且易于维护的Web应用。同时,理解并熟练运用这些知识点,有助于提升个人在现代Web开发中的专业技能。
第 1-3 课 Spring Boot 依赖环境和项目结构介绍 第 1-4 课:写一个 Hello World 来感受 Spring Boot/hello 第 2-1 课: Spring Boot 对基础 Web 开发支持/spring-boot-web 第 2-10 课: 使用 Spring Boot ...
5. **源码分析**:在提供的压缩包 `springcloud-test` 中,可能包含了 Spring Boot Admin 与 Spring Boot 应用集成的示例代码。你可以通过查看 `Application.java` 文件来了解如何启动和配置服务器及客户端,同时...