`
shinesuo
  • 浏览: 156148 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

Spring Boot 源码分析 —— 项目结构一览

 
阅读更多

1. 概述

本文主要分享 Spring Boot 的项目结构
希望通过本文能让胖友对 Spring Boot 的整体项目有个简单的了解。

Spring Boot 项目结构

2. 代码统计

这里先分享一个小技巧。笔者在开始源码学习时,会首先了解项目的代码量。

第一种方式,使用 IDEA Statistic 插件,统计整体代码量。

Statistic 统计代码量

我们可以粗略的看到,总的代码量在 268485 行。这其中还包括单元测试,示例等等代码。
所以,不慌。特别是 Spring 项目的代码,单元测试覆盖是超级全面的。

第二种方式,使用 Shell 脚本命令逐个 Maven 模块统计 

一般情况下,笔者使用 find . -name "*.java"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l 。这个命令只过滤了部分注释,所以相比 IDEA Statistic 偏多

当然,考虑到准确性,胖友需要手动 cd 到每个 Maven 项目的 src/main/java 目录下,以达到排除单元测试的代码量。

Shell 脚本统计代码量

统计完后,艿艿有点慌。哈哈哈哈。

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 的胖友,可以看看下面两篇文章:

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课件1 —— 创建和运行Spring Boot项目

    **Spring Boot创建与运行项目详解** Spring Boot是Java开发领域中的一个热门框架,它通过简化配置和自动装配,使得创建和运行Spring应用变得更加容易。在本篇内容中,我们将深入探讨如何利用Spring Boot来创建和...

    spring boot整合JPA——demo

    本示例“spring boot整合JPA——demo”将演示如何在Spring Boot项目中配置和使用JPA。 首先,我们需要理解Spring Boot与JPA的关系。Spring Boot是基于Spring框架的快速开发工具,它通过自动化配置减少了常规设置...

    spring boot源码分析

    深入学习spring boot 懂得各个标签,注解的用途和原理

    果子学院Spring boot源码解析

    《果子学院Spring Boot源码解析》是一套深入学习Spring Boot源码的教程,旨在帮助开发者深入了解这个流行的Java开发框架的内部工作机制。Spring Boot简化了Java应用的初始搭建以及开发过程,它集成了大量常用的第三...

    Spring Boot源码(spring-boot-2.6.2.zip)

    例如,自动配置(Auto-Configuration)是Spring Boot的一项关键特性,它能根据项目中引入的依赖来自动配置相应的bean。在源码中,你可以看到`@EnableAutoConfiguration`注解以及相关的`META-INF/spring.factories`...

    第三节-springboot源码解析-王炸篇.pdf

    通过源码分析,开发者可以更好地理解Spring Boot的自动装配、启动流程以及如何自定义启动器。Spring Boot的自动装配原理涉及到Spring Boot的核心特性,它简化了基于Spring的应用开发,通过自动配置减少了大量的配置...

    Spring Boot实战派(源码)

    《Spring Boot实战派》源码提供了丰富的学习材料,旨在帮助开发者深入理解并...通过分析《Spring Boot实战派》源码,读者不仅可以了解上述技术点,还能学习到如何在实际项目中应用这些技术,提升开发效率和代码质量。

    spring-boot源码

    下面,我们将深入探讨Spring Boot的源码,揭示其内部工作原理。 1. **自动配置**:Spring Boot的自动配置是其核心特性之一。在`spring-boot-autoconfigure`模块中,通过条件注解(如`@ConditionalOnClass`, `@...

    基于spring boot餐厅管理系统源码.zip

    基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 基于spring boot餐厅管理系统源码 ...

    java毕业设计——基于spring boot的音乐播放网站设计与实现(源码+数据库).zip

    java毕业设计——基于spring boot的音乐播放网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的音乐播放网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的音乐播放网站设计与...

    使用Gradle 构建spring Boot工程系列项目源码(配合第五篇文章)

    通过对这个项目源码的探索和实践,开发者不仅可以掌握Gradle的基本用法,还能深入了解Spring Boot的结构和工作原理,提升项目构建和管理的能力。通过阅读源码并动手实践,你可以更好地理解这些概念,并将它们应用到...

    基于 Spring Boot + MySQL 开发的博客系统源码.zip

    基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring Boot + MySQL 开发的博客系统源码 基于 Spring ...

    spring boot 深入浅出源码

    此外,Spring Boot的starter项目结构值得探究。每个Starter都有一个主POM,引入了必要的依赖,为开发者提供了便捷的一站式解决方案。例如,`spring-boot-starter-web`包含了Spring Web、Spring MVC和Tomcat等核心...

    java maven工程 spring boot 学习源码

    本学习资源包“java maven工程 spring boot 学习源码”提供了一个可以直接运行的示例工程,有助于深入理解Spring Boot和Maven的结合使用。 首先,我们需要了解Spring Boot的核心特性。Spring Boot通过内嵌的Servlet...

    spring-boot-2.7.0.zip源码

    通过深入阅读和分析Spring Boot 2.7.0的源码,我们可以了解到Spring Boot是如何实现其核心特性的,以及如何利用Spring Framework进行扩展和定制。同时,这也有助于我们更好地利用Spring Boot进行微服务开发,提高...

    Spring Boot源码(spring-boot-2.6.2.tar.gz)

    Spring Boot是Java开发领域的一款非常流行的框架,它简化了基于Spring的应用程序开发流程。Spring Boot 2.6.2是该框架...通过分析源码,我们可以学习到Spring框架的最佳实践,以及如何设计和实现一个健壮的微服务架构。

    java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip

    java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理网站设计与实现(源码+数据库).zip java毕业设计——基于spring boot的就业信息管理...

    《Vue Spring Boot前后端分离开发实战》源码Vue+Spring Boot前后端分离开发实战教学课件(PPT)

    通过这套源码的学习,开发者可以掌握如何在实际项目中整合Vue.js和Spring Boot,构建高效、稳定且易于维护的Web应用。同时,理解并熟练运用这些知识点,有助于提升个人在现代Web开发中的专业技能。

    spring boot 42讲配套源码.zip

    第 1-3 课 Spring Boot 依赖环境和项目结构介绍 第 1-4 课:写一个 Hello World 来感受 Spring Boot/hello 第 2-1 课: Spring Boot 对基础 Web 开发支持/spring-boot-web 第 2-10 课: 使用 Spring Boot ...

    spring boot admin demo 源码 java 服务器 监控

    5. **源码分析**:在提供的压缩包 `springcloud-test` 中,可能包含了 Spring Boot Admin 与 Spring Boot 应用集成的示例代码。你可以通过查看 `Application.java` 文件来了解如何启动和配置服务器及客户端,同时...

Global site tag (gtag.js) - Google Analytics