Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
关注我
转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/
项目结构
结构分析:
- Spring-boot-project 核心代码,代码量很多(197508 行)
- Spring-boot-samples 一些样例 demo,代码量不多(9685 行),蛮有用的
- Spring-boot-samples-invoker 里面无代码
- Spring-boot-tests 测试代码(1640 行)
spring-boot-project
Spring-boot-project 下面有很多模块,如下:
Spirng-boot
该模块 47760 行代码(含测试代码),Spring boot 主要的库,提供了支持 Spring Boot 其他部分的功能,其中包括了:
- 在
SpringApplication
类,提供静态便捷方法,可以很容易写一个独立的 Spring 应用程序。它唯一的工作就是创造并更新一个合适的 SpringApplicationContext
- 带有可选容器的嵌入式 Web 应用程序(Tomcat,Jetty 或 Undertow)
- 一流的外部配置支持
- 便捷
ApplicationContext
初始化程序,包括对敏感日志记录默认值的支持
spring-boot-actuator
该模块 18398 行代码(含测试代码),spring-boot-actuator 模块它完全是一个用于暴露自身信息的模块,提供了一个监控和管理生产环境的模块,可以使用 http、jmx、ssh、telnet 等管理和监控应用。审计(Auditing)、 健康(health)、数据采集(metrics gathering)会自动加入到应用里面。
spring-boot-actuator-autoconfigure
该模块 16721 行代码(含测试代码),Spring Boot Actuator 提供了额外的自动配置功能,可以在生产环境中实现可即时部署和支持的功能,从而装饰你的应用。例如,如果您正在编写 JSON Web 服务,那么它将提供服务器,安全性,日志记录,外部配置,管理端点,审计抽象等等功能。如果您想关闭内置功能,或者扩展或替换它们,它也会变得非常简单。
spring-boot-autoconfigure
该模块 51100 行代码(含测试代码), Spring Boot 可以根据类路径的内容配置大部分常用应用程序。单个@EnableAutoConfiguration
注释会触发 Spring上下文的自动配置。
自动配置尝试推断用户可能需要哪些 bean。例如,如果 HSQLDB
在类路径中,并且用户尚未配置任何数据库连接,则他们可能需要定义内存数据库。当用户开始定义他们自己的 bean 时,自动配置将永远远离。
spring-boot-cli
该模块 9346 行代码(含测试代码),Spring 命令行应用程序编译并运行 Groovy 源代码,使得可以编写少量代码就能运行应用程序。Spring CLI 也可以监视文件,当它们改变时自动重新编译并重新启动。
spring-boot-dependencies
该模块里面没有源码,只有所有依赖和插件的版本号信息。
spring-boot-devtools
该模块 9418 行代码(含测试代码),spring-boot-devtools 模块来使 Spring Boot 应用支持热部署,提高开发者的开发效率,无需手动重启 Spring Boot 应用。
spring-boot-docs
该模块 671 行代码,springboot 参考文件。
spring-boot-parent
该模块是其他项目的 parent,该模块的父模块是 spring-boot-dependencies。
spring-boot-properties-migrator
该模块有 495 行代码,在 Spring Boot 2.0 中,许多配置属性被重新命名/删除,开发人员需要更新application.properties
/ application.yml
相应的配置。为了帮助你解决这一问题,Spring Boot 发布了一个新spring-boot-properties-migrator
模块。一旦作为该模块作为依赖被添加到你的项目中,它不仅会分析应用程序的环境,而且还会在启动时打印诊断信息,而且还会在运行时为您暂时迁移属性。在您的应用程序迁移期间,这个模块是必备的,完成迁移后,请确保从项目的依赖关系中删除此模块。
spring-boot-starters
Starter POMs 是由很多方便的依赖集合组成,如果你需要使用某种技术,通过添加少量的jar就可以把相关的依赖加入到项目中去。
虽然你看得到有这么多 starter,但是却没有一行 Java 代码,意不意外?
这确实是 Spring Boot 自动配置的关键之处,后面我可以讲讲。
spring-boot-test
测试代码!有 10980 行代码。
spring-boot-test-autoconfigure
自动配置的测试代码,有 6063 行代码。
spring-boot-tools
- spring-boot-antlib
Spring Boot AntLib 模块为 Apache Ant 提供了基本的 Spring Boot 支持。 您可以使用该模块创建可执行文件夹。 要使用该模块,您需要在 build.xml 中声明一个额外的 spring-boot 命名空间,如以下示例所示:
xml <project xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:spring-boot="antlib:org.springframework.boot.ant" name="myapp" default="build"> ... </project>
您需要记住使用 -lib 选项启动 Ant,如以下示例所示:
ant -lib <folder containing spring-boot-antlib-2.1.0.BUILD-SNAPSHOT.jar>
- Spring-boot-autoconfigure-processor
spring boot 自动配置的核心类
- Spring-boot-configuration-metadata
Spring boot 配置元数据
- Spring-boot-configuration-processor
spring boot 配置的核心
- Spring-boot-gradle-plugin
Spring Boot Gradle 插件在 Gradle 中提供了 Spring Boot 支持,可以打包成可执行 jar 或 war ,运行 Spring Boot 应用程序,并使用 spring-boot-dependencies 提供的依赖关系管理。 它需要 Gradle 4.0 或更高版本。
- Spring-boot-maven-plugin
Spring Boot Maven Plugin 在 Maven 中提供了 Spring Boot 支持,让您可以打包成可执行 jar 或 war 应用,并“就地”运行应用程序。 要使用它,你必须使用 Maven 3.2(或更高版本)。
- Spring-boot-loader
spring-boot-load 模块通过自定义 jar 包结构,自定义类加载器,优雅的实现了嵌套 jar 资源的加载,通过打包时候重新设置启动类和组织 jar 结构,通过运行时设置自定义加载器来实现嵌套 jar 资源加载。
- Spring-boot-loader-tools
spring-boot-load 模块的工具模块
- Spring-boot-test-support
测试
spring-boot-samples
样例 demo 比较多,大家看源码的时候可以拿这些现成 demo 测试。
spring-boot-tests
相关文章
1、Spring Boot 2.0系列文章(一):Spring Boot 2.0 迁移指南
2、Spring Boot 2.0系列文章(二):Spring Boot 2.0 新特性详解
3、Spring Boot 2.0系列文章(三):Spring Boot 2.0 配置改变
4、Spring Boot 2.0系列文章(四):Spring Boot 2.0 源码阅读环境搭建
5、Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
6、Spring Boot 2.0系列文章(六):Spring boot 2.0 中 SpringBootApplication 注解详解
总结
本文主要分析了下 Spring boot 项目源码结构。包含 Spring boot 核心源码、样例 demo、测试。分析了项目的整体结构后,后面才能够有的放矢的去读源码。
最后
虽然源码很难,但随着不断的探索,源码在你面前将会一览无遗,享受这种探索后的成就感!加油!骚年!
Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览的更多相关文章
- Spring Boot 2.0系列文章(七):SpringApplication 深入探索
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/30/springboot_SpringApplication/ 前言 在 Spring B ...
- 2018年分享的Spring Cloud 2.x系列文章
还有几个小时2018年就要过去了,盘点一下小编从做做公众号以来发送了273篇文章,其中包含原创文章90篇,虽然原创的有点少,但是2019年小编将一如既往给大家分享跟多的干货,分享工作中的经验,让大家在 ...
- C#网络编程系列文章(五)之Socket实现异步UDPserver
原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...
- Spring mvc Data Redis—Pub/Sub(附Web项目源码)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
- Spring Data Redis—Pub/Sub(附Web项目源码)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
- Spring Data Redis—Pub/Sub(附Web项目源码) (转)
一.发布和订阅机制 当一个客户端通过 PUBLISH 命令向订阅者发送信息的时候,我们称这个客户端为发布者(publisher). 而当一个客户端使用 SUBSCRIBE 或者 PSUBSCRIBE ...
- [渣译文] SignalR 2.0 系列: 开始使用SignalR 2.0
原文:[渣译文] SignalR 2.0 系列: 开始使用SignalR 2.0 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP ...
- 广告行业中那些趣事系列8:详解BERT中分类器源码
最新最全的文章请关注我的微信公众号:数据拾光者. 摘要:BERT是近几年NLP领域中具有里程碑意义的存在.因为效果好和应用范围广所以被广泛应用于科学研究和工程项目中.广告系列中前几篇文章有从理论的方面 ...
随机推荐
- react-native-image-picker 运用launchCamera直接调取摄像头的缺陷及修复
在前几天用react-native进行android版本开发当中,用到了"react-native-image-picker"的插件:根据业务的需求:点击按钮-->直接调取摄 ...
- Extensions in UWP Community Toolkit - Mouse Cursor
概述 UWP Community Toolkit Extensions 中有一个为 Mouse 提供的扩展 - Mouse Cursor Extensions,本篇我们结合代码详细讲解 Mouse C ...
- linux环境安装mysql,以及mysql基本的终端操作命令
linux环境下安装mysql服务器.客户端mysql简单的终端操作指令(使用数据库.简单的增删改查和备份恢复)1 SQL: Structured Query Language 结构化查询语言. 运用 ...
- python 资产管理
python 资产管理 一.Agent 方式 1.这个方法的优点:使用简单,速度快,适合服务器较多场景使用,缺点:服务器比较占资源,性能会变低. 2.使用Agent的前提条件是客户端(服务器)特别多的 ...
- 使用LINGO来解决0/1背包算法问题
1.问题说明 0/1背包问题:我们有n种物品,物品j的重量为wj,价格为pj.我们假定所有物品的重量和价格都是非负的.背包所能承受的最大重量为W.如果限定每种物品只能选择0个或1个,则问题称为0-1背 ...
- global与nonlocal关键字总结
global适用于函数内部修改全局变量的值 nonlocal适用于嵌套函数中内部函数修改外部变量的值 如果没有使用以上关键字,对全局变量或者外部变量进行修改,python会默认将全局变量隐藏起来 例1 ...
- javax.el.ELException: Error reading [name] on type [com.news.entity.Topic_$$_javassist_1]异常
异常如下: 异常分析:从message中可以看出,错误是读取异常,属性是name,路径是com.news.entity.Topic,此错误是使用Hibernate时,由于Hibernate还没有去数据 ...
- 【MySQL】通过Binary Log简单实现数据回滚(一)
一.前言 对,没错,我又水了好一阵子,深刻反思寄几.前段时间,工作项目上出于对excel等批量操作可能出现误操作的问题,要求提供一个能够根据操作批次进行数据回滚的能力.在开发的过程中接触到了MySQL ...
- MYSQL存储过程中事务和DECLARE EXIT/CONTINUE HANDLER的使用
-- 1.DECLARE EXIT HANDLER FOR SQLEXCEPTION 语句后面可以跟一个 begin end的复合语句块,也可以直接跟一个简单语句例如 :DECLARE EXIT HA ...
- ssh爆破(python脚本)
最近在乌云看到一份端口详解:为了锻炼自己,按照端口详解写脚本 #!/usr/local/bin/ python # -*- coding: UTF-8 -*- __author__ = 'yangxi ...