当前位置: 首页 > news >正文

Spring Boot 3.4 :@Fallback 注解 - 让微服务容错更简单

在这里插入图片描述

01 前言

在 Spring Boot 3.4.x 版本中,@Fallback 注解的引入为 bean 的注入逻辑提供了新的解决方案。

下面将深入探讨其用法及优势。

02 @Fallback 注解概述

@Fallback 注解与 @ConditionalOnSingleCandidate 配合使用。

当存在单个 Primary Bean 时条件匹配;

若无 Primary Bean,则存在单个非 Fallback Bean 时也会匹配。

03 @Fallback 注解的使用场景

  1. 创建项目与定义接口 :新建 Spring Boot 3.4.0 及以上版本项目,定义一个 MyService 接口。
  2. 实现多个 Bean :分别实现 MyServiceImpl1 和 MyServiceImpl2 两个类,均标注 @Service 注解。
  3. 定义 AnotherBean 类 :该类依赖 MyService 类型的 bean,并在构造函数中注入。
  4. 配置 @ConditionalOnSingleCandidate :在 AnotherConfiguration 配置类中,使用 @ConditionalOnSingleCandidate 注解来条件性地创建 AnotherBean Bean。
  5. 测试接口 :通过 IndexController 类中的 index 方法调用 AnotherBean 的 doSomething 方法。

当未使用 @Fallback 注解时,由于存在多个 MyService 类型的 Bean,启动项目会报错,表明无法确定注入哪一个 Bean。

但若在 MyServiceImpl1 类上添加 @Fallback 注解,项目则可正常启动并输出相应日志。

以下是优化后的代码示例及分析:

MyService 接口

public interface MyService {void doSomething();
}
MyServiceImpl1 实现类
@Slf4j
@Service
@Fallback  // 标识该类为回退实现
public class MyServiceImpl1 implements MyService {@Overridepublic void doSomething() {log.info("这是 MyServiceImpl1 的实现,作为回退选项");}
}

MyServiceImpl2 实现类

@Slf4j
@Service
public class MyServiceImpl2 implements MyService {@Overridepublic void doSomething() {log.info("这是 MyServiceImpl2 的实现");}
}

AnotherBean 类

public class AnotherBean {private MyService myService;public AnotherBean(MyService myService) {this.myService = myService;}public void doSomething() {myService.doSomething();}
}

AnotherConfiguration 配置类

@Configuration
public class AnotherConfiguration {@Bean@ConditionalOnSingleCandidate(MyService.class)  // 条件注解,基于单候选 Beanpublic AnotherBean anotherBean(MyService myService) {return new AnotherBean(myService);}
}

IndexController 控制器

@RestController
public class IndexController {private final AnotherBean anotherBean;public IndexController(AnotherBean anotherBean) {this.anotherBean = anotherBean;}@GetMapping("/index")public String index() {anotherBean.doSomething();return "success";}
}

注解 :

  1. MyService 接口定义了 doSomething 方法,作为业务操作的规范。
  2. MyServiceImpl1 和 MyServiceImpl2 类分别实现了 MyService 接口。

MyServiceImpl1 通过 @Fallback 注解标识为回退实现,在没有明确的 Primary Bean 时,它将作为候选。

  1. AnotherBean 类依赖 MyService 类型的 Bean,并在构造函数中注入。
    它通过调用 MyService 的 doSomething 方法来执行具体业务逻辑。

  2. AnotherConfiguration 配置类中的 anotherBean 方法使用 @ConditionalOnSingleCandidate 注解。
    该注解会检查 MyService 类型的 Bean 是否存在单个候选(包括 Primary Bean 或非 Fallback Bean)。

如果满足条件,则创建 AnotherBean Bean。

  1. IndexController 控制器通过构造函数注入 AnotherBean,并在 index 方法中调用其 doSomething 方法。

最后
Spring Boot 3.4.x 版本的 @Fallback 注解为开发者提供了更灵活的 bean 注入策略。

在面对多个实现类时,通过 @Fallback 注解可以有效避免因 Spring 无法确定注入哪个 Bean 而导致的项目启动失败问题。

http://www.xdnf.cn/news/1098001.html

相关文章:

  • 大健康IP如何借“合规创新”抢占行业新风口|创客匠人
  • 创始人IP如何进阶?三次关键突破实现高效转化
  • Windows 11 安装过程中跳过微软账户创建本地账户
  • TCP传输控制层协议深入理解
  • Apache http 强制 https
  • 征程 6M 部署 Omnidet 感知模型
  • 正向代理服务器Squid:功能、架构、部署与应用深度解析
  • 基于 Flutter 的开源文本 TTS 朗读器(支持 Windows/macOS/Android)
  • 防爬虫君子协定 Robots.txt 文件
  • 微软云语音识别ASR示例Demo
  • Spring Boot:将应用部署到Kubernetes的完整指南
  • 使用langchain连接llama.cpp部署的本地deepseek大模型开发简单的LLM应用
  • Rust and the Linux Kernel
  • AUTOSAR进阶图解==>AUTOSAR_SWS_MFXLibrary
  • imx6ull-裸机学习实验17——SPI 实验
  • 数据结构与算法之美:广义表
  • 【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
  • JAVA JVM的内存区域划分
  • 政安晨【开源人工智能硬件】【ESP乐鑫篇】 —— 在macOS上部署工具开发环境(小资的非开发者用苹果系统也可以玩乐鑫)
  • 在 Mac 上安装 Java 和 IntelliJ IDEA(完整笔记)
  • (鱼书)深度学习入门1:python入门
  • 【IO复用】五种IO模型
  • 【2025/07/10】GitHub 今日热门项目
  • steam独立游戏开发销售全流程:2025实战版
  • 数据结构笔记10:排序算法
  • 百度文心ERNIE4.5部署与性能白皮书:FastDeploy加速方案+全系列模型实测数据对比
  • jenkins部署springboot项目
  • 实验作业1+整理笔记截图
  • 缺乏日常项目进度例会机制,如何系统推进
  • Spring事务管理深度解析:原理、实践与陷阱