如何使用策略模式并让spring管理
1、策略模式公共接口类
BankFileStrategy
public interface BankFileStrategy {String getBankFile(String bankType) throws Exception;
}
2、策略模式业务实现类
@Slf4j
@Component
public class ConcreteStrategy implements BankFileStrategy {@Overridepublic String getBankFile(String bankType) throws Exception {....业务代码}
3、策略模式实现类枚举
public enum BankTypeClassEnum {//strategyA("ICBC", "concreteStrategy"),;private String name;private String implName;public static String getImplName(String name) {if (StringUtils.isBlank(name)) {return null;}for (BankTypeClassEnum aEnum : BankTypeClassEnum.values()) {if (aEnum.getName().equals(name)) {return aEnum.getImplName();}}return null;}BankTypeClassEnum(String name, String implName) {this.name = name;this.implName = implName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getImplName() {return implName;}public void setImplName(String implName) {this.implName = implName;}
}
4、策略模式执行类
@Slf4j
@Component
public class BankFileContext {//当一个接口有多个实现类时,Spring会自动将Strategy接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类@Autowiredprivate Map<String, BankFileStrategy> bankFileStrategyMap;/*** 执行类*/public String execute(String bankType) throws Exception {BankFileStrategy service = bankFileStrategyMap.get(BankTypeClassEnum.getImplName(bankType));return service.getBankFile(bankType);}
}
5、测试策略模式
@Slf4j
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestBankFileController {private final BankFileContext bankFileContext;@GetMapping(value = "/bank/{bankType}/file")public String testBankFile(@PathVariable String bankType) {try {return bankFileContext.execute(bankType);} catch (Exception e) {log.error("testBankFile is error", e);return "error";}}
}
相关文章:
如何使用策略模式并让spring管理
1、策略模式公共接口类 BankFileStrategy public interface BankFileStrategy {String getBankFile(String bankType) throws Exception; } 2、策略模式业务实现类 Slf4j Component public class ConcreteStrategy implements BankFileStrategy {Overridepublic String ge…...
react中hooks之useRef 用法总结
1. 基本概念 useRef 是 React 的一个 Hook,返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数。这个对象在组件的整个生命周期内保持不变。 2. 主要用途和特性 2.1 获取 DOM 元素实例 function TextInputWithFocusButton() {const inpu…...
使用 Docker 部署 Java 项目(通俗易懂)
目录 1、下载与配置 Docker 1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同) 1.2 配置 Docker 代理对象 2、打包当前 Java 项目 3、进行编写 DockerFile,并将对应文件传输到 Linux 中 3.1 编写 dockerfile 文件 …...
如何在Ubuntu上安装和配置Git
版本控制系统(VCS)是软件开发过程中不可或缺的工具之一,它帮助开发者跟踪代码变更、协作开发以及管理不同版本的项目。Git作为当前最流行的分布式版本控制系统,因其高效性和灵活性而广受青睐。本文将指导你如何在Ubuntu操作系统上…...
FPGA 21 ,深入理解 Verilog 中的基数,以及二进制数与十进制数之间的关系( Verilog中的基数 )
目录 前言 一. 基数基础 1.1 基数介绍 2.1 基数符号 3.1 二进制数 二. 二进制与十进制数 三. 二进制数 3.1 定义寄存器类型变量 3.2 定义线网类型变量 3.3 赋值操作 3.4 解析二进制数为十进制数 四. 代码示例 五. 注意事项 六. 更多操作 前言 在Verilog中&#…...
【redis】redis-cli命令行工具的使用
redis-cli命令行工具是一个功能强大的Redis客户端,它允许用户与Redis数据库进行交互和管理。 以下是一些常用参数的使用说明: 基本连接参数 -h, --host <hostname>:指定要连接的Redis服务器的主机名或IP地址。如果未指定,…...
使用Matplotlib显示中文的方法
1 问题提出 使用图1所示的代码进行matplotlib绘图时,因为其默认不支持中文,此时无法显示正确内容,如图2所示。 图1 matplotlib绘图绘图代码 图2 matplotlib无法显示中文 2 问题解决 2.1 设置全局字体 在图1所示的代码中,第13…...
SQL Server2022详细安装教程
1. 打开SQL Server官网:SQL Server 下载 | Microsoft 2. 选择Developer版 3. 下载好安装包,打开,选择自定义 4. 选择下载位置,最好不要在C盘即主磁盘即可。等待下载 5. 下载成功之后会弹出这个框 6. 点击“安装”&#…...
家里温度随心控,假期出行更舒适~
春节假期马上到来啦!这是放松身心、陪伴家人的最佳时机~ 但旅途结束的温差变化、空气质量问题是否让你有些担忧呢? 别担心!有了约克VRF中央空调,让你的假期更加舒心无忧~ 清新空气,自在出游…...
压力测试详解
压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力,并确保软件在危急情况下不会崩溃。它甚至可以测试超出正常工作点的测试,并评估软件在极端…...
从epoll事件的视角探讨TCP:三次握手、四次挥手、应用层与传输层之间的联系
目录 一、应用层与TCP之间的联系 二、 当通信双方中的一方如客户端主动断开连接时,仅是在客户端的视角下连接已经断开,在服务端的眼中,连接依然存在,为什么?——触发EPOLLRDHUP事件:对端关闭连接或停止写…...
Redis复制(replica)
Redis主从复制 [Redis主从复制](replica)是一个多Redis实例进行数据同步的过程,其中一个实例是主实例(Master),其他实例是从实例(Slave)。主实例负责处理命令请求,而从实…...
[云讷科技] 用于软件验证的仿真环境
我们使用Pursuit自动驾驶仪为各种场景设计仿真环境,以便用户可以在模拟环境中直接验证他们的软件,无需现场测试。该环境基于Gazebo引擎。 1. 工作区目录 模拟环境的工作区位于提供的U盘中的~/pursuit_space/sitl_space_pursuit中。用户可以按照用户手册…...
使用 Vite 和 Vue 框架创建组件库
在前端开发中,组件化开发已成为一种高效、可维护的方式。通过创建组件库,不仅可以提高代码复用率,还能方便地在不同项目之间共享组件。本文将详细介绍如何使用 Vite 和 Vue 框架创建一个组件库,并将其导出供其他项目使用。为保持一…...
【数据结构学习笔记】19:跳表(Skip List)
介绍 跳表是一个能在 O ( n l o g n ) O(nlogn) O(nlogn)时间完成查找、插入、删除的数据结构,相比于树形结构优点就是很好写(所以也用于实现Redis ZSet)。其核心思想就是维护一个元素有序的,能随机提升索引层数的链表。最下面一…...
【8】深入理解 Go 语言中的协程-从基础到高级应用
文章目录 一、引言 🌟二、协程基础概念 🧐(一)什么是协程(二)协程与线程、进程的区别三、协程的创建与启动 🚀(一)使用 go 关键字创建协程(二)简单…...
深入理解 ECMAScript 2024 新特性:字符串 isWellFormed 方法
ECMAScript 2024 引入了一个新的字符串实例方法:String.prototype.isWellFormed。这一新增功能是为了帮助开发者更容易地验证字符串是否为有效的 Unicode 文本。本文将详细介绍这一方法的使用场景、实现原理及其在实际应用中的价值。 String.prototype.isWellFormed…...
算法分析与设计之贪心算法
文章目录 前言一、Greedy Algorithms1.1 贪心选择性质1.2 最优子结构性质1.3 正确性证明 二、典型例题2.1 Interval Scheduling间隔调度2.2 Interval Partitioning最少间教室排课2.3 Selecting Breakpoints选择加油站停靠点2.4 硬币找零2.5 Scheduling to Minimizing Lateness2…...
Centos 宝塔安装
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 安装成功界面 宝塔说明文档 https://www.bt.cn/admin/servers#wcu 或者可以注册宝塔账号 1 快速部署 安装docker 之后 2 需要在usr/bin下下载do…...
蓝桥与力扣刷题(709 转换成小写字母)
题目:给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。 示例 1: 输入:s "Hello" 输出:"hello"示例 2: 输入:s "here…...
1688图搜接口有复购率对于选品的你们有帮助吗
1688 图搜接口的复购率数据,对选品非常有帮助,是判断商品长期生命力与供应链稳定性的核心指标。一、复购率在图搜选品中的核心价值验证商品质量与用户粘性高复购率(B 端通常 > 20%,优秀 > 30%)直接证明商品质量稳…...
用Python+Pandas搞定校园单车数据清洗:从‘200+’到精准分布表的保姆级教程
用PythonPandas搞定校园单车数据清洗:从‘200’到精准分布表的保姆级教程 校园单车数据清洗是数据分析实战中的经典场景。想象一下这样的情境:你拿到一份包含15个停车点、7个时间段的校园单车统计表,却发现数据里混杂着"200"这样的…...
高效代码分析利器:cloc工具全场景使用指南
1. 为什么你需要cloc这个代码统计神器 第一次接手一个遗留项目时,我盯着密密麻麻的目录树发愁:这堆代码到底有多少实际内容?注释占比多少?不同语言的文件各有多少?直到同事推荐了cloc工具,输入一行命令就得…...
从编译错误到版本管理:C语言“商人过河”游戏代码的现代化改造之旅
1. 从古董代码到现代项目:一场技术考古与修复之旅 第一次打开那份"商人过河"的C语言游戏代码时,我仿佛穿越回了二十年前。满屏的编译错误、过时的函数调用、混乱的格式,还有那些早已被现代编译器抛弃的写法。这让我想起刚入行时接手…...
windows java jar 包后台运行
使用 javaw 实现后台运行(简单场景)这是最简单的方法。Java 自带的 javaw.exe 是 java.exe 的变体,它运行程序时不会打开任何控制台窗口。操作步骤:创建一个新的文本文件,命名为 start.bat。在文件中写入以下内容&…...
用ESP32-S3和百度AI做个会聊天的智能音箱(Arduino+文心一言+语音识别)
用ESP32-S3和百度AI打造会聊天的智能音箱:从硬件组装到语音交互全流程 想象一下,清晨醒来只需对桌上的小盒子说句"今天天气如何",就能听到温柔的女声播报天气预报;工作时随口问"量子计算是什么",立…...
炉石传说HsMod插件终极指南:55项免费功能解锁全新游戏体验
炉石传说HsMod插件终极指南:55项免费功能解锁全新游戏体验 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 你是否厌倦了炉石传说中冗长的动画等待?是否想要更流畅的游戏体…...
MySQL 8.0.34和5.7.43双版本共存安装指南(Windows环境避坑大全)
MySQL 8.0与5.7双版本共存实战:Windows环境全流程避坑指南 1. 版本共存的核心挑战与解决方案 在开发环境中同时运行MySQL 8.0和5.7版本的需求日益普遍——可能是为了兼容旧系统,或是测试应用在不同版本下的表现。但Windows环境下实现双版本共存会遇到几个…...
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析
3个秘诀让城通网盘下载提速10倍:ctfileGet工具全解析 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet ctfileGet是一款专注于获取城通网盘直连地址的开源工具,通过本地解析技术帮…...
Tetrazine-NHBoc,cas:1380500-93-5,四嗪-氨基叔丁酯的结构特点
Tetrazine-NHBoc(四嗪-氨基叔丁酯)是一种结合了四嗪基团和N-叔丁氧羰基(NHBoc)保护基的有机化合物,以下是对其的详细介绍:一、基本信息中文名称:四嗪-氨基叔丁酯英文名称:Tetrazine-…...
