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

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容器进行管理&#xff0c;和普通工厂的区别就是springboot中的类不能通过自己New出来使用&#xff0c;如果通过new写入到工厂&#xff0c;涉及到相关实现类调用其他Service&#xff08;该service在正确情况下正常注入&#xff09;&#xff…...

如何避免缓存击穿?使用GO语言实现sliglefight

前言 在缓存系统中&#xff0c;如果发生了缓存未命中&#xff0c;通常会向数据库或者其他的缓存系统来请求数据。 想象这样一种情况&#xff0c;缓存系统中某个热点值被删除了&#xff0c;随后一大批请求到来&#xff0c;造成大量的cache miss&#xff0c;如果这些请求全部都…...

【浅学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股突然集体爆发

尽管再度重申“公司股票将被停止上市”&#xff0c;但3月8日早间&#xff0c;*ST辅仁股价仍是在开盘后快速封住涨停板。这已是该公司近6个买卖日来&#xff0c;第5次呈现涨停。 无独有偶&#xff0c;8日早间ST东瀛也在此前多次涨停后&#xff0c;再度呈现近4%的涨幅。而就在7日…...

Git 基础(一)—— Git 的安装及其配置

目录 一、Git 的下载与安装 1、Linux 环境 2、Windows 环境 (1) 下载 Git 安装包 (2) 安装 Git 二、Git 配置 1、配置用户信息 2、查看配置信息 3、Windows 环境下配置文件的位置 一、Git 的下载与安装 1、Linux 环境 在保证网络环境畅通的情况下&#xff0c;直接输…...

什么是信息安全风险评估?企业如何做?

什么是信息安全风险评估&#xff1f; 信息安全风险评估是参照风险评估标准和管理规范&#xff0c;对信息系统的资产价值、潜在威胁、薄弱环节、已采取的防护措施等进行分析&#xff0c;判断安全事件发生的概率以及可能造成的损失&#xff0c;提出风险管理措施的过程。当风险评…...

HBase---idea操作Hbase数据库并且映射到Hive

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

剑指 Offer 61 扑克牌中的顺子

摘要 扑克牌中的顺子 一、集合 Set 遍历 根据题意&#xff0c;此5张牌是顺子的 充分条件 如下&#xff1a; 除大小王外&#xff0c;所有牌 无重复 &#xff1b;设此5张牌中最大的牌为max&#xff0c;最小的牌为min&#xff08;大小王除外&#xff09;&#xff0c;则需满足…...

Spring 响应式编程-读书笔记

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

CI流水线的理解

一、概念 单元测试&#xff1a;针对软件的基本单元&#xff08;如&#xff1a;类、函数&#xff09;所做的测试。 集成测试&#xff1a;将软件代码单元集成起来后&#xff0c;以组件、模块和子系统为单位进行的测试&#xff0c;主要测试接口间的交互关系。也称组件测试&#xf…...

OpenStack手动分布式部署Nova【Queens版】

目录 Nove简介&#xff1a; 1、登录数据库配置&#xff08;在controller执行&#xff09; 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.下载安装包:里面有一份详细的安装教程 链接&#xff1a;https://pan.baidu.com/s/1Of2a72pNLZ-DDIWKrTQfLw?pwd8NAx 提取码&#xff1a;8NAx 2.安装后,执行初始化:时间较长 /etc/init.d/oracledb_ORCLCDB-19c configure 3.配置环境变量,不配置环境变量,sq…...

山东小巨人申报条件

国家专精特新小巨人特点1、经济效益&#xff1a;上年度企业营业收入在1亿元至4亿元之间&#xff0c;近2年主营业务收入或净利润的平均增长率达到10%以上&#xff0c;企业资产负债率不高于70%。2、专业化程度&#xff1a;&#xff08;1&#xff09;企业从事特定细分市场时间达到…...

手写中实现并学习ahooks——useRequest

前言 最近业务没有之前紧张了&#xff0c;也是消失了一段时间&#xff0c;也总结了一些之前业务上的问题。 和同事沟通也是发现普通的async await 封装api在复杂业务场景下针对于请求的业务逻辑比较多&#xff0c;也是推荐我去学习一波ahooks&#xff0c;由于问题起源于请求…...

[手写OS]动手实现一个OS 之 准备工作以及引导扇区

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

JVM实战OutOfMemoryError异常

目录 Java堆溢出 常见原因&#xff1a; 虚拟机栈和本地方法栈溢出 实验1&#xff1a;虚拟机栈和本地方法栈测试&#xff08;作为第1点测试程序&#xff09; 实验2&#xff1a;&#xff08;作为第1点测试程序&#xff09; 运行时常量池和方法区溢出 运行时常量池内存溢出 …...

C++虚函数操作指南

1 什么是虚函数&#xff1f;1.1 虚函数的使用规则1.2 用 C 运行虚函数的示例1.3 协变式返回类型2 在 C 中使用虚函数的优点2.1 代码更为灵活、更为通用2.2 代码可复用2.3 契约式设计3 虚函数的局限性3.1 性能3.2 设计问题3.3 调试&#xff0c;容易出错4 虚函数的替代方案4.1 仅…...

Mybatis-Plus分页插件

引言&#xff1a;MyBatis Plus自带分页插件&#xff0c;只要简单的配置即可实现分页功能 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 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a;思路因为是存放在数组里不同位置的元素&#xff0c;因此不需要考虑去重的操作&#xff0c;而…...

详解抓包原理以及抓包工具whistle的用法

什么是抓包? 分析网络问题业务分析分析网络信息流通量网络大数据金融风险控制探测企图入侵网络的攻击探测由内部和外部的用户滥用网络资源探测网络入侵后的影响监测链接互联网宽频流量监测网络使用流量(包括内部用户&#xff0c;外部用户和系统)监测互联网和用户电脑的安全状…...

【C++】反向迭代器

文章目录一、什么是反向迭代器二、STL 源码中反向迭代器的实现三、reverse_iterator 的模拟实现四、vector 和 list 反向迭代器的实现一、什么是反向迭代器 C 中一共有四种迭代器 – iterator、const_iterator、reverse_iterator 以及 const_reverse_iterator&#xff0c;其中…...

(蓝桥真题)扫描游戏(计算几何+线段树二分)

题目链接&#xff1a;P8777 [蓝桥杯 2022 省 A] 扫描游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入&#xff1a; 5 2 0 1 1 0 3 2 4 3 5 6 8 1 -51 -33 2 样例输出&#xff1a; 1 1 3 4 -1 分析&#xff1a;先考虑如何对物件进行排序&#xff0c;首先&…...

面试官:什么是双亲委派模型?如何打破它?

本文已经收录进 JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。) 参加过校招面试的同学,应该对这个问题不陌生。一般提问 JVM 知识点的时候,就会顺带问你双亲委派模型(别扭的翻译。。。)。 就算是不准备面试,学习双亲委派模型对于我…...

自建服务器系列- DDNS配置

1、环境说明 光猫桥接路由器拔号的模式 2、DDNS是什么 对于DHCP方式获得的IP&#xff0c;无论对于局域网内来说&#xff0c;还是外网来说&#xff0c;都会有使得IP地址每隔一段时间变化一次&#xff0c;如果想要通过恒定不变的地址访问主机&#xff0c;就需要动态域名解析。…...

vue中使用axios简单封装用法,axios报错the request was rejected because no multipart boundar

在这里插入代码片## 创建实例 //这个写法作为我错误的记录&#xff0c;可以不看暂时 transformRequest: [(data: any) > {if (!data) {data {}}return qs.stringify(data)}]在我的项目里面&#xff0c;初始化配置里面进行handers的修改&#xff0c;例如&#xff1a;例如将…...

Leetcode.1220 统计元音字母序列的数目

题目链接 Leetcode.1220 统计元音字母序列的数目 Rating &#xff1a; 1730 题目描述 给你一个整数 n&#xff0c;请你帮忙统计一下我们可以按下述规则形成多少个长度为 n的字符串&#xff1a; 字符串中的每个字符都应当是小写元音字母&#xff08;a, e, i, o, u&#xff09;…...

深入元空间

元空间是干嘛的&#xff1f;元空间存储的是类的相关信息&#xff0c;就是类的运行时表达。包括&#xff1a;Class文件类的结构和方法常量注解代码优化JDK1.8分界在1.8版本之前&#xff0c;类的meta信息、类变量、字符串常量池都存储在永久代。1.8版本以后&#xff0c;类变量、实…...

前端技术和框架

一、各种技术概述 1.HTML &#x1f9e8;HTML中文称为超文本标记语言&#xff0c;从语义上来说&#xff0c;它只是一种是一种标识性的语言&#xff0c;并不是一种编程语言。 <p>这是一段话</p>通过这个标签可以表示文本的一个段落。而且其中还有还有图片标签、视…...

02从零开始学Java之Java到底是个啥?

博主简介我是壹壹哥(孙玉昌)&#xff0c;十年软件开发授课经验&#xff0c;CSDN博客专家、阿里云专家博主、掘金优秀创作者、infoQ专家博主&#xff1b;关注壹壹哥(孙玉昌)&#xff0c;带你玩转Java&#xff0c;轻松实现从入门到放弃&#xff0c;哦不&#xff0c;到熟悉&#x…...

做asp网站教程/百度seo按天计费

1、java 中任何对象都可以作为锁 2、同步代码执行完成后会自动释放掉 3、happend-before 4、类锁和对象锁相互几乎不影响&#xff0c;不存在竞争 5、私有锁和对象锁不存在竞争&#xff0c;相互不影响 6、一个线程一旦调用wait()就释放了所以的锁&#xff0c;一个等待线程被noti…...

制作网站网站/网站收录查询系统

rman 的兼容策略(&#xff01;)1 原则上你可以在8.1.x的数据库上创建8.x 或者9.x的回复目录对象&#xff0c;在9.0.1或者更高的版本上创建10.0.1或者更高版本的恢复目录对象2 恢复目录对象的版本必须高于或者等于rman 客户端的版本3 如果恢复目录是虚拟私有目录。连接恢复目录的…...

青岛有做网站的吗/网络推广引流最快方法

去除上边和右边的坐标边框&#xff0c;指定data&#xff0c;设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上 #get current axis 获得坐标轴对象 ax plt.gca()#去除上边 和 右边的 坐标边框 ax.spines[right].set_color(none) ax.spines[top].set_color(none)#指定 data …...

做二手房比较好的网站有哪些/今日新闻头条大事

没什么新的内容&#xff0c;把自己写的练习代码贴出来&#xff0c;供大家批判。 1 /*2 本程序用来测试非线性存储结构&#xff1a;双链表3 */4 5 6 #include <stdio.h>7 #include <stdlib.h>8 9 10 //**************************************************011 /…...

买域名做网站的坏处/产品如何在网上推广

如何在Linux环境下添加Oracle用户信息呢&#xff1f;下文对Oracle用户信息的添加方法作了详细的介绍&#xff0c;希望可以让您对Oracle用户信息方面有更深的认识。创建一个用户组oinstall&#xff1a;# groupadd oinstall创建一个用户组dba&#xff1a;# groupadd dba创建一个用…...

厦门软件园多客宝网站开发/壹起航网络推广的目标

一、HTTP 1.1 超文本传输协议&#xff08;HTTP&#xff09;是用于分布式&#xff0c;协作式和超媒体信息系统的应用协议。它是Web上数据交换的基础&#xff0c;是一种client-server协议&#xff0c;也就是说请求通常是由像浏览器这样的接受方发起的。 1.2 HTTP被设计于上20世纪…...