SpringBoot工厂模式

前言

下面的示例展示了 SpringBoot 中如何使用工厂模式,该示例通过 ApplicationContext 直接获取 Spring 容器中所有 Animal 的 Bean,然后将它们存储在 animalMap 中,使用时直接从 Map 中获取实例。

另一种工厂模式可参考我另一篇文章 :SpringBoot 工厂模式自动注入到Map

一、建立父类

java">public abstract class Animal {public abstract void makeSound();public abstract String getType();
}

二、两个子类

java">@Component
public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Miao!");}@Overridepublic String getType() {return "cat";}
}
java">@Component
public class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Wang!");}@Overridepublic String getType() {return "dog";}
}

三、工厂类注入到 map 里

java">@Component
public class AnimalFactory implements ApplicationContextAware, InitializingBean {private final Map<String, Animal> animalMap = new ConcurrentHashMap<>();private ApplicationContext appContext;public Animal getAnimal(String animalType) {Animal animal = this.animalMap.get(animalType);if (animal == null) {throw new IllegalArgumentException("Unsupported animal type: " + animalType);}return animal;}@Overridepublic void afterPropertiesSet() throws Exception {Map<String, Animal> beansOfType = this.appContext.getBeansOfType(Animal.class);beansOfType.values().forEach(animal -> animalMap.put(animal.getType(), animal));}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.appContext = applicationContext;}
}

四、测试

java">@Autowiredprivate AnimalFactory animalFactory;public void printSound() throws Exception {Animal animal_1 = animalFactory.getAnimal("dog");animal_1.makeSound(); // 输出 "Wang!"Animal animal_2 = animalFactory.getAnimal("cat");animal_2.makeSound(); // 输出 "Miao!"}

http://www.ppmy.cn/news/1516212.html

相关文章

实现Nginx四层负载均衡

Nginx在1.9.0版本开始支持tcp模式的负载均衡&#xff0c;在1.9.13版本开始支持udp协议的负载&#xff0c;udp主要用于 DNS的域名解析&#xff0c;其配置方式和指令和http 代理类似&#xff0c;其基于ngx_stream_proxy_module模块实现tcp 负载&#xff0c;另外基于模块ngx_strea…

零基础5分钟上手亚马逊云科技核心云架构知识-创建NoSQL数据库

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

左手阿维塔右手深蓝,华为抢占高端及主流市场

在新能源汽车领域&#xff0c;一场由科技巨头引领的变革正在加速推进。 8月20日&#xff0c;阿维塔与华为正式签约并宣布入股引望智能技术有限公司&#xff0c;这一战略合作不仅标志着阿维塔在高端汽车市场的布局进一步深化&#xff0c;而且还预示着华为将与长安旗下的深蓝品牌…

[ICS] 物理安全

工业控制系统安全气泡类比 这个理念是&#xff0c;为了防御那些无法更新到最新安全控制措施的旧系统&#xff0c;或者由于设备资源有限而无法处理安全控制措施的系统&#xff0c;帮助可视化这种设备的安全策略可以将它们放置在一个肥皂泡或玻璃泡中。泡中的系统和设备彼此信任…

idea 项目启动慢,报内存溢出,调整jvm参数

idea 项目启动慢&#xff0c;直接报内存溢出了 java: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;调整 idea jvm参数 在IntelliJ IDEA中&#xff0c;可以通过以下步骤来全局设置Java堆大小&#xff1a; 打开IntelliJ IDEA。从菜单栏选择 “Help” &…

Transformer模型、强化学习、深度学习模型可解释性与可视化方法、注意力机制、目标检测算法、图神经网络、强化学习

近年来&#xff0c;伴随着以卷积神经网络&#xff08;CNN&#xff09;为代表的深度学习的快速发展&#xff0c;人工智能迈入了第三次发展浪潮&#xff0c;AI技术在各个领域中的应用越来越广泛。 抽丝剥茧、深入浅出讲解注意力机制、Transformer模型&#xff08;BERT、GPT-1/2/…

Servlet---Web会话跟踪 ▎token令牌

▍为什么要进行Web会话跟踪? http请求是无状态的,不携带用户信息的,当用户登录成功后,之后在于服务器交互时,服务器并不知道是哪个用户发送的请求 ▍Web会话跟踪 解决方法:在用户成功登录后,后端向前端响应token令牌(token令牌:用户信息),前端保存token令牌每次访问后端都先…

RabbitMQ如何保证消息不丢失

RabbitMQ消息丢失的三种情况 第一种&#xff1a;生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候&#xff0c;可能数据就在半路给搞丢了&#xff0c;因为网络问题啥的&#xff0c;都有可能。 第二种&#xff1a;RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了。 第三种…

C++类和对象(总篇)

文章目录 C类和对象1、类的定义1.1类定义格式1.2访问限定符1.3类域 2、实例化2.1实例化概念 3、this指针4、类的默认成员函数5、构造函数5.1构造函数的特点5.2实例分析 6、析构函数6.1析构函数的特点6.2实例分析 7、拷贝构造函数7.1 拷贝构造函数的特点7.2实例分析7.3浅拷贝和深…

【linux中高级命令】

杀进程 1、lsof列出所有打开的文件&#xff0c;‌包括网络连接&#xff0c;‌从而提供关于系统状态的宝贵信息‌ #可以直接查看端口的进程 lsof -i:端口获取到进程&#xff0c;使用kill命令和PID来终止进程 kill -9 [PID]2、列出使用该端口的进程信息&#xff0c;‌包括PID …

基于Python的mediapipe和opencv的人体骨骼、人体姿态关键点的实时跟踪项目

随着计算机视觉技术的发展&#xff0c;人体姿态估计在虚拟现实、运动分析、人机交互等领域得到了广泛应用。传统的姿态估计方法通常依赖于深度学习模型&#xff0c;需要大量的计算资源。而 Google 开发的 MediaPipe 框架则提供了高效且易于使用的解决方案&#xff0c;它可以在各…

如何解决git@github.com: Permission denied (publickey)异常

如何解决gitgithub.com: Permission denied异常 一、错误信息描述二、解决办法2.1、获取本地SSH Key2.2、将本地的SSH Key添加到github 一、错误信息描述 gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you …

LlamaIndex 实现 RAG(四)- RAG 跟踪监控

RAG 整个流程不复杂&#xff0c;集成三大部分包括文档解析并生成向量、根据查询问题查找语意相似的数据文档块、把查询问题和召回文档作为上下文的数据传给模型进行解答。大语言模型的应用开发和传统的开发方式区别很大&#xff0c;以前开发完成&#xff0c;只要逻辑正确&#…

linux系统使用 docker 来部署web环境 nginx+php7.4 并配置称 docker-compose-mysql.yml 文件

Docker是一个开源的容器化平台&#xff0c;旨在简化应用程序的创建、部署和管理。它基于OS-level虚拟化技术&#xff0c;通过将应用程序和其依赖项打包到一个称为容器的标准化单元中&#xff0c;使得应用程序可以在任何环境中快速、可靠地运行。 Docker的优势有以下几个方面&a…

乐鑫蓝牙Mesh协议栈ESP-BLE-MESH方案,设备智能连接通信的桥梁

随着科技的不断进步&#xff0c;智能家居已经不再是科幻小说中的梦想&#xff0c;而是触手可及的现实。在这场智能化革命中&#xff0c;蓝牙Mesh技术以其卓越的稳定性和扩展性&#xff0c;成为了连接家庭中每一个智能设备的桥梁。 它像一张隐形的网&#xff0c;将无数设备紧密…

C++基础语法:while的使用

前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 引入 while的使用是编写代码的基础内容.笔者的记忆力已不如以前,最近遇到了还花了不少功夫,可见是掌握地不够牢固.所以对while的思路和内容…

爬取央视热榜并存储到MongoDB

1. 环境准备 在开始之前&#xff0c;确保你已经安装了以下Python库&#xff1a; pip install requests pymongo2. 爬取网页内容 首先&#xff0c;我们需要爬取央视热榜的网页内容。通过requests.get()方法&#xff0c;我们可以获取网页的HTML内容&#xff0c;并通过re.finda…

回归预测|基于北方苍鹰优化NGO-Transformer-GRU组合模型的数据预测Matlab程序多特征输入单输出

回归预测|基于北方苍鹰优化NGO-Transformer-GRU组合模型的数据预测Matlab程序多特征输入单输出 文章目录 前言回归预测|基于北方苍鹰优化NGO-Transformer-GRU组合模型的数据预测Matlab程序多特征输入单输出 一、NGO-Transformer-GRU模型NGO-Transformer-GRU组合模型的数据预测1…

JAVA_11

JAVA_11 JAVA容器1. 容器 JAVA容器 1. 容器 整体结构 //有序、可重复 List list new ArrayList();//泛型 System.out.println(list.isEmpty());List.add("高淇"); System.out.println(list);System.out.printin(list.isEmpty());List.add("高三");list…

流媒体服务器如何让WebRTC支持H.265,同时又能支持Web js硬解码、软解码(MSE硬解、WASM软解)

为了这一整套的解决方案&#xff0c;调研研发整整花费了差不多半年多的时间&#xff0c;需达成的目标&#xff1a; 流媒体服务器端不需要将H.265转码成H.264&#xff0c;就能让Chrome解码播放H.265&#xff1b; 注意&#xff1a;现在很多市面上的软硬件通过转码H.265成H.264的…