likes
comments
collection
share

快速阅读一个SpringBoot工程

作者站长头像
站长
· 阅读数 11

介绍

Spring Boot是一个用于构建基于Spring框架的分布式应用程序的框架。它通过提供丰富的功能和工具,使我们能够更快速、更轻松地创建和维护应用程序。Spring Boot利用了Spring框架的核心概念,如依赖注入、面向切面编程等,使我们可以更加专注于业务逻辑的实现。阅读 Spring Boot 工程是学习和应用 Spring Boot 框架的必要步骤之一。

昨天有个小伙伴私信我问了一个问题:“网上的Springboot开源项目看不懂不知从何下手、进入公司如何快速上手交接的项目?”,正好最近我这边也经历了这个事情:公司同事离职某个测试质量平台交接给了我,但是无任何文档说明、项目工程无readme文件。下面,就以我自己的阅读方式来做一个概述,不足之处欢迎各位大佬指正 快速阅读一个SpringBoot工程(接受反驳,真的)

☀️本地启动

clone工程到本地

快速阅读一个SpringBoot工程

快速阅读一个SpringBoot工程

配置启动器

快速阅读一个SpringBoot工程

修改本地环境配置文件中的本地mysql连接(如有)

快速阅读一个SpringBoot工程

启动工程,将项目在本地跑起来

快速阅读一个SpringBoot工程

🌤️了解项目架构

首先我们需要了解这个项目是做什么的(提供什么样能力的工程)、项目使用了哪些技术 如:A项目,主要用于给测试平台X提供接口服务能力,主要使用的技术栈能力包括:mysql、mybatis、zookeeper、elasticsearch、netty、Spring、redis...等

⛅️查看项目结构

Spring工程一般是采用分层思想进行开发,分层优点是每层只专注本层工作做自己最擅长的事情,层与层之间会通过适配器进行通信。分层思想需要满足的规则如下:

  • 单一:每层只处理一类事情,满足单一职责原则
  • 降噪:信息在每一层进行传输,满足最小知识原则,只向下层传输必要信息
  • 适配:每层都需要一个适配器,翻译信息为本层或者下层可以理解的信息
  • 业务:业务对象可以整合业务逻辑
  • 数据:数据对象尽量纯净,尽量不要聚合业务

SpringBoot工程可以分为九层

  • 工具层:util
    • 工具层承载工具代码。不依赖本项目其它模块,只依赖一些通用工具包
  • 整合层:integration
    • 可能会依赖外部服务,那么将外部DTO转换为自己项目可以理解的对象,需要在integration层处理
  • 基础层:infrastructure
    • 基础层核心是承载数据访问,entity实体对象承载在本层。只依赖工具模块
  • 服务层:service
    • 核心代码
  • 领域层:domain
    • 领域对象需要体现业务含义(领域对象采用充血模型聚合业务)、业务对象
    • 业务层可以更加灵活组合不同领域业务,并且可以增加流控、监控、日志、权限,分布式锁等控制,相较于领域层功能更为丰富
  • 门面层:facade
    • 承载对外服务
  • 控制层:controller
    • 作为本项目HTTP接口提供服务,供前端调用
  • 客户端:client
    • 承载数据对外传输对象DTO
  • 启动层:boot
    • 启动层,只有启动入口代码

需要了解的是,这东西并没有一套通用的标准,不同公司或者团队的使用习惯和规范也不尽相同。

以上理论参考文章SpringBoot工程分层实战cloud.tencent.com/developer/a…

简单来说,可以从如下几个方面去借鉴思考:

  1. 应用程序主模块(Application):该模块是整个应用程序的入口点,负责启动和管理其他模块。
  2. 依赖项模块(Dependency):该模块包含了应用程序所需的所有依赖项,如Spring Boot Starter、Spring Data等。这些依赖项可以通过Maven或Gradle等构建工具进行管理。
  3. 业务逻辑模块(Business):该模块包含了应用程序的核心业务逻辑,通常由多个Spring组件组成,如控制器(Controller)、服务(Service)、实体类(Entity)等。
  4. 测试模块(Test):该模块包含了应用程序的单元测试和集成测试代码,以确保应用程序的质量和稳定性。

快速阅读一个SpringBoot工程

快速阅读一个SpringBoot工程

🌥️目录结构及文件

通常,Spring Boot 工程的主要文件结构包括 src/main/java 目录src/main/resources 目录pom.xml 文件

  • src/main/java 目录包含了项目的 Java 代码
  • src/main/resources 目录包含了项目的静态资源、配置文件等
  • src/test/java 目录主要放置项目测试用例代码
  • pom.xml 文件是 Maven 的配置文件,用于管理项目的依赖和构建方式

这里估计还有同学会问关于DTO/VO/DO等数据模型定义的区分,参考《阿里巴巴Java开发手册》中定义如下:

  • DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
  • DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
  • BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。
  • AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
  • VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
  • Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。

个人觉得,只要保证业务逻辑层Service和数据库DAO层的操作对象严格划分出来,确保互相不渗透不混用即可

对应上面的项目代码结构,假设一个用户访问一个页面接口请求到后端,流程大概如下:(图片参考来自知乎用户@CodeSheep程序羊)

快速阅读一个SpringBoot工程

对应代码目录的流转逻辑就是:

快速阅读一个SpringBoot工程

☁️查看配置文件

Spring Boot 应用程序通常使用 application.propertiesapplication.yml 等配置文件来配置应用程序的属性、环境变量、数据库连接等。我们可以通过查看这些配置文件,了解应用程序的环境和配置信息,并了解其中使用的技术和框架。通过查看配置文件,我们可以更快速地掌握应用程序的核心配置和逻辑。在这一步,我们可以查看到Spring工程启动端口、测试环境数据库的连接地址、其他配置变量等。

🌦️查看启动类

Spring Boot 应用程序通常有一个入口类,我们可以从这个类开始查看工程代码。该类通常被标注为 @SpringBootApplication,包含了 Spring Boot 应用程序的配置和初始化逻辑。我们可以通过查看启动类,快速了解应用程序的主要配置和初始化过程,以便更好地理解应用程序的整个运行流程。在这一步,我们可以将启动配置中的Main Class配置为该入口类。

快速阅读一个SpringBoot工程

🌧️分析控制器层

在 Spring Boot 工程中,控制器层通常是应用程序的入口点,负责处理 HTTP 请求和响应。我们可以通过查看控制器层的代码,了解应用程序的接口和业务逻辑,并了解数据的传递和处理过程。在源码中,我们可以看到Spring Boot使用 @Controller 注解来标识控制器类,并使用 @RequestMapping 注解来指定请求的处理方法。

@RestController
@RequestMapping("/api/testdemo/alarminfo")
public class AlarmManagerController {

	@Autowired
	AlarmManagerService alarmManagerService;

	@RequestMapping(value = "/detail", method = RequestMethod.POST)
	public Result alarmDetail(@ModelAttribute("alarmManagerDto") AlarmDetailDto alarmDetailDto){
		...
	}

}

⛈️分析服务层

在 Spring Boot 工程中,服务层通常是应用程序的核心业务逻辑所在。在源码中,我们可以看到Spring Boot使用 @Service 注解来标识服务类,并定义各种业务逻辑方法。我们可以通过查看服务层的代码,了解应用程序的业务逻辑和数据处理过程,并了解其中使用的技术和框架。

@Service
@Slf4j
public class AlarmManagerServiceImpl implements AlarmManagerService {
	...
}

🌩️理解依赖关系

Spring Boot 应用程序通常依赖于许多二方三方库和框架。我们可以通过查看 pom.xml 文件和应用程序的依赖关系,了解应用程序所依赖的库和框架,并了解它们是如何相互作用的。理解应用程序的依赖关系,可以更好地了解应用程序的整体结构和实现方式。

快速阅读一个SpringBoot工程

🌨️调试&阅读源码

阅读项目源码并调试(可结合某个功能来使用,一个组件或一个接口,我们可以通过debug、看报错信息、看日志信息、打印变量等方式来进行快速熟悉)

❄️新增需求

添加自己需求的接口、模块、功能代码

理解Spring Boot设计思路

了解Spring Boot的设计思路可以帮助我们更好地理解和应用该框架

  1. 约定优于配置:Spring Boot通过约定来减少开发者需要手动配置的内容。例如,Spring Boot可以根据环境变量自动配置数据库连接池等组件。
  2. 自动配置:Spring Boot通过自动配置来简化开发过程。它通过扫描应用程序中的各种组件,并根据需要自动配置它们。这使得开发者可以更加专注于实现业务逻辑。
  3. 面向切面编程(AOP):Spring Boot支持面向切面编程,使得开发者可以更加轻松地实现跨模块的功能,如日志记录、性能监控等。
  4. 分布式部署:Spring Boot支持分布式部署,使得应用程序可以更加轻松地扩展和部署到不同的服务器上。

反思总结

  1. 了解Spring Boot的核心概念:在阅读Spring Boot工程之前,我们需要先了解其核心概念,如依赖注入、面向切面编程等。这有助于我们更好地理解工程中的各个组件和代码实现。
  2. 关注工程的结构和组织:阅读Spring Boot工程时,我们需要关注其结构和组织方式。这有助于我们更好地理解各个模块的功能和作用,以及代码的组织方式。
  3. 学习如何使用构建工具:构建工具(如Maven、Gradle)是管理Spring Boot工程的重要工具。我们需要学习如何使用这些构建工具来管理依赖项、构建应用程序等操作。
  4. 分析代码实现:阅读Spring Boot工程的代码实现可以帮助我们更好地理解其工作原理和实现方式。我们可以分析代码中的注解、配置文件、控制器、服务等组件,以了解其功能和作用。
  5. 深入了解核心模块:为了更好地应用Spring Boot框架,我们需要深入了解其核心模块,如自动配置、面向切面编程等。这有助于我们更加熟练地应用该框架,并实现更加复杂的功能。
  6. 结合实际项目经验:阅读Spring Boot工程的同时,我们需要结合实际项目经验来理解和应用该框架。