Spring中的组合模式

组合模式是一种对象设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端以统一的方式处理单个对象和对象的组合。在Spring框架中,组合模式被广泛应用,让我们深入分析一下。

在Spring中,组合模式主要应用在IoC容器中,通过将组件组合成树形结构,来实现对象的依赖关系管理和生命周期控制。这种依赖关系管理方式在Spring框架中是非常重要的,它使得Spring可以方便地管理复杂的对象依赖关系。
CompositeCacheManager是Spring框架中用于管理多个CacheManager的复合类。它使用组合模式来组合多个CacheManager对象,以便在应用程序中使用多个缓存系统。

下面是对CompositeCacheManager源码的组合模式分析:

  1. 定义接口

首先,定义一个CacheManager接口,该接口定义了缓存管理的基本操作:

public interface CacheManager {Cache getCache(String name);
}
  1. 实现组件类

然后,实现一个名为SimpleCacheManager的类,该类实现了CacheManager接口:

public class SimpleCacheManager implements CacheManager {private Map<String, Cache> caches = new HashMap<>();public SimpleCacheManager() {}public void addCache(Cache cache) {caches.put(cache.getName(), cache);}@Overridepublic Cache getCache(String name) {return caches.get(name);}
}

SimpleCacheManager类中有一个名为caches的Map,用于存储缓存对象。通过addCache方法可以向caches中添加缓存对象。getCache方法根据缓存名称获取缓存对象。

  1. 定义抽象组件类

接下来,定义一个名为AbstractCompositeCacheManager的抽象类,该类实现了CacheManager接口:

public abstract class AbstractCompositeCacheManager implements CacheManager {protected List<CacheManager> cacheManagers = new ArrayList<>();public void addCacheManager(CacheManager cacheManager) {cacheManagers.add(cacheManager);}protected Cache getCacheFromAllManagers(String name) {for (CacheManager cacheManager : cacheManagers) {Cache cache = cacheManager.getCache(name);if (cache != null) {return cache;}}return null;}
}

AbstractCompositeCacheManager类中有一个名为cacheManagers的List,用于存储多个CacheManager对象。通过addCacheManager方法可以向cacheManagers中添加CacheManager对象。getCacheFromAllManagers方法从所有组合的CacheManager中获取指定名称的缓存对象。如果找到缓存对象,则返回该对象;否则返回null。

  1. 实现具体组合类

最后,实现一个名为CompositeCacheManager的类,该类继承自AbstractCompositeCacheManager:

public class CompositeCacheManager extends AbstractCompositeCacheManager {public CompositeCacheManager() {super(); //调用父类的无参构造函数}@Overridepublic Cache getCache(String name) {Cache cache = getCacheFromAllManagers(name);if (cache == null) { //如果没有找到缓存对象,则创建一个新的缓存对象并添加到组合中cache = new SimpleCache(name); //创建一个新的缓存对象并添加到组合中需要指定缓存的名称以及其他属性,例如最大元素数、过期时间等。这里不再赘述。addCache(cache); } return cache;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker+Nginx部署Angular

DockerNginx部署Angular 在部署Angular生产环境之前&#xff0c;需要电脑已经安装docker。 添加Dockerfile 在已经完成的Angular项目的项目根目录下添加Dockerfile文件。 Dockerfile文件内容&#xff1a; FROM nginx:1.11-1.11-alpine COPY index.html /usr/share/nginx/ht…

U-net网络详解

U-net网络 简单说一下网络图中各项所代表的内容&#xff1a; 蓝/白色框表示feature map(特征图) 蓝色箭头表示3x3卷积&#xff0c;主要用于特征提取 灰色箭头表示skip-connection&#xff08;跳跃连接&#xff0c;通常用于残差网络中&#xff09;,在这里是用于用于特征融合&…

Angular Web App部署Ubuntu Nginx

Angular Web App部署Ubuntu Nginx 当我们想发布Angular Web App的时候,我们想在开发的时候部署测试,那么这篇文章使用Nginx来部署我们的Angular 系统环境 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Rele…

遗传算法-01背包

遗传算法 算法思想 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型&#xff0c;是一种通过模拟自然进化过程搜索最优解的方法。 其主要特点是直接对结构对象进行操作&#xff0c;不存在求导和函…

Angular Web App部署Linux Nginx Https

Angular Web App部署Linux Nginx Https 提示:这篇文章是基于内网的 互联网就开始将 WEB 服务从 HTTP 迁移到 HTTPS,而现在为了更快的推进 HTTPS 的普及,Chrome 将从 2018 年 7 月起标记所有的 HTTP 网站为不安全链接。 HTTPS 会逐渐成为 WEB 服务的标配,最最重要的是,它能…

SOLO算法简读

论文链接&#xff1a;https://arxiv.org/abs/1912.04488 代码链接&#xff1a;https://github.com/WXinlong/SOLO 摘要 提出一种新的实例分割方法。与语义分割等其他密集预测任务相比&#xff0c;实例分割的难度要大得多。为了预测每个实例的掩码&#xff0c;主流方法要么遵…

Rxjs的flatMap使用

Rxjs的flatMap使用 flatMap是Rxjs比较绕的一个概念&#xff0c;这里我们只是讲解如何使用。在Rxjs 4.0版本时叫flatMap,在Rxjs 5.0时被更名为margeMap,现在flatMap作为margeMap的别名使用&#xff0c;这是考虑向下兼容。 官方flatMap的定义&#xff1a; Projects each sourc…

关于Loss的简单总结

Dice Loss 参考&#xff1a;https://blog.csdn.net/l7H9JA4/article/details/108162188 Dice系数&#xff1a; 是一种集合相似度度量函数&#xff0c;通常用于计算两个样本的相似度&#xff0c;取值范围为[0,1]。 s2∣X∩Y∣∣X∣∣Y∣s \frac{2|X ∩ Y|}{|X||Y|} s∣X∣∣Y…

Angular_PWA使用+Demo

Angular_PWA使用+Demo 什么是PWA PWA(Progressive Web App)利用TLS,webapp manifests和service workers使应用程序能够安装并离线使用。 换句话说,PWA就像手机上的原生应用程序,但它是使用诸如HTML5,JavaScript和CSS3之类的网络技术构建的。 如果构建正确,PWA与原生应…

SOLOv2论文简读

论文&#xff1a;SOLOv2: Dynamic, Faster and Stronger 代码&#xff1a;https://github.com/WXinlong/SOLO 摘要 主要提出了作者在SOLOv2中实现的优秀的实例分割方法&#xff0c;旨在创建一个简单、直接、快速的实例分割框架&#xff1a; 通过提出动态学习对象分割器的mas…

Angular6_PWA

Angular6_PWA Angular正式发布了V6.0,我们已经可以利用对应的@angular/cli V6.0来直接开发PWA应用了。 第一步:安装@angular/cli V6.0 如果你机器上有老版本,请先卸载。 打开你的终端,执行: npm install -g @angular/cli 或 cnpm install -g @angular/cli 安装成功…

Ubuntu18.04 关于使用vnc的踩坑

由于种种原因&#xff0c;手上多了一台可使用的桌面版Ubuntu&#xff0c;正好用来测试代码&#xff0c;方便调试。因为只能远程&#xff0c;所以需要配置远程连接。因此就打算使用vnc进行远程连接&#xff0c;谁料一路坎坷&#xff0c;特此记录。 安装 设置桌面共享 需要注意…

App_Shell模型

App_Shell模型 App Shell 架构是构建 Progressive Web App 的一种方式,这种应用能可靠且即时地加载到您的用户屏幕上,与本机应用相似。 App shell是支持用户界面所需的最小的 HTML、CSS 和 JavaScript,如果离线缓存,可确保在用户重复访问时提供即时、可靠的良好性能。这意…

Angular6_服务端渲染SSR

Angular6_服务端渲染 在使用服务端渲染之前,需要安装最新版本的Angular。 npm install -g @angular/cli 或 cnpm install -g @angular/cli github项目 创建项目 ng new PWCat --routing 为项目添加universalng g universal --client-project=PWCat 或

Jenkins自定义主题教程

Jenkins自定义主题 由于Jenkins自带的样式比较丑陋&#xff0c;所以有很多第三方的样式库&#xff0c;这里针对jenkins-material-theme样式库做一个安装教程。 下载样式库 下载连接 Select your color 选择一个你喜欢的主题颜色。Choose your company logo 上传你自定义的…

IndexedDB_Web 离线数据库

IndexedDB_Web 离线数据库 本文会从头剖析一下 IndexedDB 在前端里面的应用的发展。 indexedDB 目前在前端慢慢得到普及和应用。它正朝着前端离线数据库技术的步伐前进。以前一开始是 manifest、localStorage、cookie 再到 webSQL&#xff0c;现在 indexedDB 逐渐被各大浏览器认…

Angular 单元测试讲解

Angular_单元测试 测试分类 按开发阶段划分按是否运行划分按是否查看源代码划分其他ATDD,TDD,BDD,DDD ATDDTDDBDDDDDAngular单元测试 Karma的介绍jasmine介绍单元测试的好处使用jasmine和karma创建一个Angular项目Karma配置Test.ts文件测试体验测试Form测试服务service常用断言…

基于 Docker 的微服务架构

基于 Docker 的微服务架构-分布式企业级实践前言Microservice 和 Docker服务发现模式客户端发现模式Netflix-Eureka 服务端发现模式ConsulEtcdZookeeper 服务注册自注册模式 Self-registration pattern第三方注册模式 Third party registration pattern小结一 服务间的 IPC 机制…

funcode游戏实训,java及C/C++,网上整理

软件&#xff0c;常见错误都有。 所有资源可到公众号获取(源码也是)&#xff0c;不再直接分享

Docker 容器部署 Consul 集群

Docker 容器部署 Consul 集群 Consul 介绍 Consul 提供了分布式系统的服务发现和配置的解决方案。基于go语言实现。并且在git上开放了源码consul-git。consul还包括了分布式一致协议的实现&#xff0c;健康检查和管理UI。Consul和zk相比较起来&#xff0c;更加轻量级&#xf…