springboot工厂模式解决if_else流程和问题点解决
一、主要问题点
spring中的Bean由IOC容器进行管理,和普通工厂的区别就是springboot中的类不能通过自己New出来使用,如果通过new写入到工厂,涉及到相关实现类调用其他Service(该service在正确情况下正常注入),注入的Service也会报错异常Null,也就是工厂注入失败。
二、解决和核心
工厂中的相关Bean也通过Springboot中容器注入。
核心代码在工厂中的Map加入@Autowired注解,由该注解依赖注入相关Service。
配合实现类中@Service(“参数”)使用,该参数即是Map中的String。
@Autowired
//Map String表示任务类型,FactoryService表示对应的接口。
private Map<String, FactoryService> taskTypeMap = new HashMap<>();
三、案例
1、创建一个接口,该接口根据不同的任务类型获取对应的策略。
子类实现该策略接口,不通的子类实现不同的策略方法。
/*** @Author guaiYiBug* @Description: 工厂接口类.* 根据不同的任务获取对应的策略(一个时间的逻辑判断)* @Date: 2023/3/6 16:59*/
public interface TaskTimeFactoryService {/***@Description: 获取任务时间逻辑判断*@Param: [routine]*@return: 返回一个判断好的数据实体*@Author: guaiYiBug*@date: 2023/3/8 9:35**/PlanAndPortTime getTaskTime(RoutintAndWoResp routine);
2、根据任务类型分别创建实现类。
使用注解@Service(“参数”)注入。该参数对应后续的工厂中的Map,根据该参数即可 获取到对应的实现类。
2.1 实现类1——dt实现类,也就是dt对应的策略。
@Slf4j
@Service("dt")
public class TaskTimeFactoryServiceByDtImpl implements TaskTimeFactoryService {@Autowiredprivate WechatAppletService wechatAppletService;@Overridepublic PlanAndPortTime getTaskTime(RoutintAndWoResp routine) {//Do something,和普通实现类没区别return null;}
}
2.1 实现类2——hh实现类,也就是hh对应的策略。
@Slf4j
@Service("hh")
public class TaskTimeFactoryServiceByHhImpl implements TaskTimeFactoryService {@Autowiredprivate WechatAppletService wechatAppletService;@Overridepublic PlanAndPortTime getTaskTime(RoutintAndWoResp routine) {//Do something,和普通实现类没区别return null;}
}
2.3 其他实现类都一样,就省略了,注意@Service(“类型”),该参数对应着任务类型。
3、创建工厂类
/*** @Author guaiYiBug* @Description: 将不同的任务类型放入到Map,* key为任务类型,value为具体实现类* @Date: 2023/3/6 17:07*/
@Component
public class TaskTypeFactory {/*** @Autowired用依赖注入引入 TaskTimeFactoryService 任务实现类,* 以 Bean 名称作为 Map 的 Key,以 Bean 实现类作为 Value* 配合 TaskTimeFactoryService上的注解使用,*/@Autowiredprivate Map<String, TaskTimeFactoryService> taskTypeMap = new HashMap<>();/***@Description: 查找对应任务的处理实现类*@Param: [taskType]*@return: askTimeFactoryService*@Author: guaiYiBug*@date: 2023/3/8 9:13**/public TaskTimeFactoryService getTaskType(String taskType){return taskTypeMap.get(taskType);}
}
4、工厂调用,入参任务类型,工厂中获取到对应的策略实现类。
//1、注入工厂
@Autowired
private TaskTypeFactory taskTypeFactory;//2、工厂调用,获取到对应的策略实现类接口。
//taskType为dt、hh等@Service("")中的注解,自动加入到容器首字母会小写化。
TaskTimeFactoryService timeFactory = taskTypeFactory.getTaskType(taskType);
//3、接口调用实现方法
PlanAndPortTime planAndPortTime= timeFactory.getTaskTime(routineResp);
相关文章:
springboot工厂模式解决if_else流程和问题点解决
一、主要问题点 spring中的Bean由IOC容器进行管理,和普通工厂的区别就是springboot中的类不能通过自己New出来使用,如果通过new写入到工厂,涉及到相关实现类调用其他Service(该service在正确情况下正常注入)ÿ…...
如何避免缓存击穿?使用GO语言实现sliglefight
前言 在缓存系统中,如果发生了缓存未命中,通常会向数据库或者其他的缓存系统来请求数据。 想象这样一种情况,缓存系统中某个热点值被删除了,随后一大批请求到来,造成大量的cache miss,如果这些请求全部都…...

【浅学Java】MySQL索引七连炮
MySQL索引面试七连炮0. 谈一下你对索引的理解1. MySQL索引原理和数据结构能介绍一下吗2. B树和B树的区别3. MySQL聚簇索引和非聚簇索引的区别4. 使用MySQL索引都有什么原则4.1 回表4.2 索引覆盖4.3 最左匹配4.4 索引下推5. 不同的存储引擎是如何进行数据的存储的6. MySQL组合索…...

扬帆优配|昔日白马股濒临退市,却6天5涨停!ST股突然集体爆发
尽管再度重申“公司股票将被停止上市”,但3月8日早间,*ST辅仁股价仍是在开盘后快速封住涨停板。这已是该公司近6个买卖日来,第5次呈现涨停。 无独有偶,8日早间ST东瀛也在此前多次涨停后,再度呈现近4%的涨幅。而就在7日…...

Git 基础(一)—— Git 的安装及其配置
目录 一、Git 的下载与安装 1、Linux 环境 2、Windows 环境 (1) 下载 Git 安装包 (2) 安装 Git 二、Git 配置 1、配置用户信息 2、查看配置信息 3、Windows 环境下配置文件的位置 一、Git 的下载与安装 1、Linux 环境 在保证网络环境畅通的情况下,直接输…...
什么是信息安全风险评估?企业如何做?
什么是信息安全风险评估? 信息安全风险评估是参照风险评估标准和管理规范,对信息系统的资产价值、潜在威胁、薄弱环节、已采取的防护措施等进行分析,判断安全事件发生的概率以及可能造成的损失,提出风险管理措施的过程。当风险评…...

HBase---idea操作Hbase数据库并且映射到Hive
idea操作Hbase数据库并且映射到Hive 文章目录idea操作Hbase数据库并且映射到Hiveidea操作Hbase数据库环境准备启动服务创建Maven工程在测试类中编写初始化方法在测试类中编写关闭方法在测试类中编写创建命名空间方法在测试类中编写创建表方法在测试类中编写查看表结构方法在测试…...

剑指 Offer 61 扑克牌中的顺子
摘要 扑克牌中的顺子 一、集合 Set 遍历 根据题意,此5张牌是顺子的 充分条件 如下: 除大小王外,所有牌 无重复 ;设此5张牌中最大的牌为max,最小的牌为min(大小王除外),则需满足…...

Spring 响应式编程-读书笔记
序言 大家好,我是比特桃。本文为《Spring 响应式编程》的读书笔记,响应式技术栈可以创建极其高效、易于获取且具有回弹性的端点,同时响应式可以容忍网络延迟,并以影响较小的方式处理故障。响应式微服务还可以隔离慢速事务并加速速…...

CI流水线的理解
一、概念 单元测试:针对软件的基本单元(如:类、函数)所做的测试。 集成测试:将软件代码单元集成起来后,以组件、模块和子系统为单位进行的测试,主要测试接口间的交互关系。也称组件测试…...

OpenStack手动分布式部署Nova【Queens版】
目录 Nove简介: 1、登录数据库配置(在controller执行) 1.1登录数据库 1.2数据库里创建nova-api 1.3数据库登录授权 1.4创建nova用户 1.5添加admin用户为nova用户 1.6创建nova服务端点 1.7创建compute API 服务端点 1.8创建一个placement服务…...

centos7 oracle19c安装 ORA-01012: not logged on
总共分三步 1.下载安装包:里面有一份详细的安装教程 链接:https://pan.baidu.com/s/1Of2a72pNLZ-DDIWKrTQfLw?pwd8NAx 提取码:8NAx 2.安装后,执行初始化:时间较长 /etc/init.d/oracledb_ORCLCDB-19c configure 3.配置环境变量,不配置环境变量,sq…...
山东小巨人申报条件
国家专精特新小巨人特点1、经济效益:上年度企业营业收入在1亿元至4亿元之间,近2年主营业务收入或净利润的平均增长率达到10%以上,企业资产负债率不高于70%。2、专业化程度:(1)企业从事特定细分市场时间达到…...
手写中实现并学习ahooks——useRequest
前言 最近业务没有之前紧张了,也是消失了一段时间,也总结了一些之前业务上的问题。 和同事沟通也是发现普通的async await 封装api在复杂业务场景下针对于请求的业务逻辑比较多,也是推荐我去学习一波ahooks,由于问题起源于请求…...

[手写OS]动手实现一个OS 之 准备工作以及引导扇区
[手写OS]动手实现一个OS之第一步-环境以及引导扇区 环境准备 一台可用计算机(linux我不知道,我用的Windows)汇编编译器NASM一个方便的软盘读写工具VirtualBox 汇编编译器NASM 官网地址:https://www.nasm.us/pub/nasm/snapshot…...

JVM实战OutOfMemoryError异常
目录 Java堆溢出 常见原因: 虚拟机栈和本地方法栈溢出 实验1:虚拟机栈和本地方法栈测试(作为第1点测试程序) 实验2:(作为第1点测试程序) 运行时常量池和方法区溢出 运行时常量池内存溢出 …...
C++虚函数操作指南
1 什么是虚函数?1.1 虚函数的使用规则1.2 用 C 运行虚函数的示例1.3 协变式返回类型2 在 C 中使用虚函数的优点2.1 代码更为灵活、更为通用2.2 代码可复用2.3 契约式设计3 虚函数的局限性3.1 性能3.2 设计问题3.3 调试,容易出错4 虚函数的替代方案4.1 仅…...
Mybatis-Plus分页插件
引言:MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能 1.添加Configuration配置类 Configuration MapperScan("com.atguigu.mybatisplus.mapper") //可以将主类中的注解移到此处public class MybatisPlusConfig {Beanpublic Mybatis…...
Selenium Webdriver options的实用参数设置
1、关闭Chrome浏览器受自动控制的提示 options.add_experimental_option(useAutomationExtension, False) options.add_experimental_option(excludeSwitches, [enable-automation])2、关闭是否保存密码的弹窗 options.add_experimental_option("prefs", { "c…...

代码随想录算法训练营第七天|454.四数相加II 、 383. 赎金信 、 15. 三数之和 、18. 四数之和
454.四数相加II 454.四数相加II介绍给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:思路因为是存放在数组里不同位置的元素,因此不需要考虑去重的操作,而…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...