介绍
Spring Boot是一个用于构建根据Spring结构的分布式运用程序的结构。它经过供给丰厚的功用和东西,使咱们能够更快速、更轻松地创建和保护运用程序。Spring Boot利用了Spring结构的中心概念,如依靠注入、面向切面编程等,使咱们能够愈加专心于事务逻辑的完成。阅览 Spring Boot 工程是学习和运用 Spring Boot 结构的必要步骤之一。
昨天有个小伙伴私信我问了一个问题:“网上的Springboot开源项目看不懂不知从何下手、进入公司怎么快速上手交代的项目?”,正好最近我这边也经历了这个工作:公司搭档离职某个测验质量平台交代给了我,但是无任何文档说明、项目工程无readme文件。下面,就以我自己的阅览方法来做一个概述,不足之处欢迎各位大佬指正 (承受反驳,真的)
☀️本地发动
clone工程到本地
装备发动器
修改本地环境装备文件中的本地mysql衔接(如有)
发动工程,将项目在本地跑起来
️了解项目架构
首要咱们需求了解这个项目是做什么的(供给什么样能力的工程)、项目运用了哪些技术 如: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…
简单来说,能够从如下几个方面去借鉴考虑:
- 运用程序主模块(Application):该模块是整个运用程序的进口点,负责发动和办理其他模块。
- 依靠项模块(Dependency):该模块包含了运用程序所需的所有依靠项,如Spring Boot Starter、Spring Data等。这些依靠项能够经过Maven或Gradle等构建东西进行办理。
- 事务逻辑模块(Business):该模块包含了运用程序的中心事务逻辑,一般由多个Spring组件组成,如操控器(Controller)、服务(Service)、实体类(Entity)等。
- 测验模块(Test):该模块包含了运用程序的单元测验和集成测验代码,以确保运用程序的质量和稳定性。
️目录结构及文件
一般,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程序羊)
对应代码目录的流转逻辑就是:
☁️检查装备文件
Spring Boot 运用程序一般运用 application.properties
或 application.yml
等装备文件来装备运用程序的特点、环境变量、数据库衔接等。咱们能够经过检查这些装备文件,了解运用程序的环境和装备信息,并了解其间运用的技术和结构。经过检查装备文件,咱们能够更快速地掌握运用程序的中心装备和逻辑。在这一步,咱们能够检查到Spring工程发动端口、测验环境数据库的衔接地址、其他装备变量等。
️检查发动类
Spring Boot 运用程序一般有一个进口类,咱们能够从这个类开端检查工程代码。该类一般被标注为 @SpringBootApplication
,包含了 Spring Boot 运用程序的装备和初始化逻辑。咱们能够经过检查发动类,快速了解运用程序的首要装备和初始化进程,以便更好地了解运用程序的整个运行流程。在这一步,咱们能够将发动装备中的Main Class装备为该进口类。
️剖析操控器层
在 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 文件和运用程序的依靠联系,了解运用程序所依靠的库和结构,并了解它们是怎么相互效果的。了解运用程序的依靠联系,能够更好地了解运用程序的全体结构和完成方法。
️调试&阅览源码
阅览项目源码并调试(可结合某个功用来运用,一个组件或一个接口,咱们能够经过debug、看报错信息、看日志信息、打印变量等方法来进行快速了解)
❄️新增需求
增加自己需求的接口、模块、功用代码
了解Spring Boot规划思路
了解Spring Boot的规划思路能够协助咱们更好地了解和运用该结构
- 约好优于装备:Spring Boot经过约好来减少开发者需求手动装备的内容。例如,Spring Boot能够根据环境变量主动装备数据库衔接池等组件。
- 主动装备:Spring Boot经过主动装备来简化开发进程。它经过扫描运用程序中的各种组件,并根据需求主动装备它们。这使得开发者能够愈加专心于完成事务逻辑。
- 面向切面编程(AOP):Spring Boot支持面向切面编程,使得开发者能够愈加轻松地完成跨模块的功用,如日志记录、性能监控等。
- 分布式布置:Spring Boot支持分布式布置,使得运用程序能够愈加轻松地扩展和布置到不同的服务器上。
反思总结
- 了解Spring Boot的中心概念:在阅览Spring Boot工程之前,咱们需求先了解其间心概念,如依靠注入、面向切面编程等。这有助于咱们更好地了解工程中的各个组件和代码完成。
- 关注工程的结构和安排:阅览Spring Boot工程时,咱们需求关注其结构和安排方法。这有助于咱们更好地了解各个模块的功用和效果,以及代码的安排方法。
- 学习怎么运用构建东西:构建东西(如Maven、Gradle)是办理Spring Boot工程的重要东西。咱们需求学习怎么运用这些构建东西来办理依靠项、构建运用程序等操作。
- 剖析代码完成:阅览Spring Boot工程的代码完成能够协助咱们更好地了解其作业原理和完成方法。咱们能够剖析代码中的注解、装备文件、操控器、服务等组件,以了解其功用和效果。
- 深入了解中心模块:为了更好地运用Spring Boot结构,咱们需求深入了解其间心模块,如主动装备、面向切面编程等。这有助于咱们愈加熟练地运用该结构,并完成愈加杂乱的功用。
- 结合实际项目经历:阅览Spring Boot工程的一起,咱们需求结合实际项目经历来了解和运用该结构。