值得学习!9种方法与实践提升你的Spring Boot技能

文摘   2024-10-18 20:00   新疆  

最新实战案例锦集:《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 的应用程序,如下示例:

@RestControllerAdvicepublic class GlobalControllerAdvice {  @ExceptionHandler(Exception.class)  public R exception(Exception ex) {    return R.error(ex.getMessage()) ;  }}

@ExceptionHandler 注解用于处理控制器抛出的特定异常。此注解用于在控制器或类中声明使用 @ControllerAdvice 注解的方法。

如上示例,当我们的业务发生任何异常都将被上面的GlobalControllerAdvice处理。

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章