最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。
环境:SpringBoot3.2.5
1. 简介
使用Spring Boot时,你是否曾感到不知所措?尽管Spring Boot提供了丰富的选项和生态系统库,但其高度有主见的框架设计常常让人花费大量时间去理解“Spring的方式”。即使已经使用Spring Boot超过三年,有时仍会感觉未能充分发挥其潜力。为了更好地掌握这一强大框架,本文将介绍9种方法来提升你的Spring Boot技能。
2. 提升技能的9种方法
2.1 将配置外部化
充分发挥Spring Boot潜力的方法是尽可能地将配置外部化,而不是硬编码。外部化配置可以使你的应用程序更加灵活且易于管理。外部化配置的另一个优点是,你不需要因为一个小的改动而关闭应用程序、进行修改、重新编译,然后再重新部署,如下示例:
pack:
app:
redirectUrl: http://localhost:8080
clientId: xxxooo
secretKey: oooxxx
接下来,创建配置属性类
@ConfigurationProperties(prefix = "pack.app")
public class AppProperties {
private String redirectUrl ;
private String clientId ;
private String secretKey ;
// getters, setters
}
// 启用配置属性类
@SpringBootApplication
@EnableConfigurationProperties({AppProperties.class})
public class App {}
注:Spring Boot中更推荐的做法是通过@EnableConfigurationProperties注解。
2.2 保持Controller简洁
保持控制器的简洁有助于避免导致 "臃肿控制器" 反模式的做法。
什么是 "臃肿控制器" ?
指在Web应用程序中,控制器承担了过多的业务逻辑,违反了关注点分离的原则。当控制器承担了太多职责时,以下问题很可能会出现:
可维护性:冗长控制器难以维护和理解。对业务逻辑的任何修改或添加都容易出错且变得复杂。
可测试性:当业务逻辑嵌入到控制器中时,很难进行隔离测试,这使得创建可靠的单元测试变得具有挑战性。
可重用性:在控制器中很难找到可重用的逻辑。如果应用程序的其他部分需要相同的逻辑,通常很难提取和重用。
可读性:当控制器中包含业务逻辑时,代码库的可读性会降低。开发人员很难快速理解控制器的目的和功能。
所以,我们应该遵循以下设计的原则
无状态:默认情况下,控制器是单例的,任何状态的改变都可能导致很多问题。
委托:控制器应该进行委托,也就是说它不应该执行业务逻辑,而是依赖于委托(如:Service)。
封装:应用程序的HTTP层应由控制器处理,而不应由服务层处理。
以用例为中心:确保你的控制器围绕用例或业务领域构建。
2.3 全局异常处理
要充分发挥Spring Boot的潜力,你需要学习如何全局处理异常,这很重要,因为:
细粒度控制HTTP响应:它使你能够对HTTP响应进行细粒度控制,根据异常类型返回自定义对象或响应。
全局配置:你可以定义其他应全局应用的配置,例如模型属性或响应。
避免代码重复:防止在每个控制器中重复编写异常处理代码。你只需通过
@ControllerAdvice
或@RestControllerAdvice
注解定义一个类(Bean),确保异常处理的一致性和集中化,从而使代码更易于维护。
@RestControllerAdvice 此注解扩展了 @ControllerAdvice。它专为 RESTful 网络服务而设计。可以将其用于响应形式为 JSON 或 XML 的应用程序,如下示例:
@RestControllerAdvice
public class GlobalControllerAdvice {
@ExceptionHandler(Exception.class)
public R exception(Exception ex) {
return R.error(ex.getMessage()) ;
}
}
@ExceptionHandler 注解用于处理控制器抛出的特定异常。此注解用于在控制器或类中声明使用 @ControllerAdvice 注解的方法。
如上示例,当我们的业务发生任何异常都将被上面的GlobalControllerAdvice处理。