java:aocache的单实例缓存(二)

之前一篇博客《java:aocache的单实例缓存》介绍了aoocache使用注解@AoCacheable实现单实例缓存的方式,同时也指出了这种方式的使用限制,就是这个注解定义的构造方法,不能再创建出新实例。

为了更灵活方便的实现单实例。aocache最新版本0.4.0增加了支持单实例缓存的工具类Singleton

为应用层实现单实例缓存提供了更灵活的方式:
Singleton提供了weakSingletonOfsingletonOf两种方法分别提供弱引用单实例缓存,和普通强引用单实例

weakSingletonOf

java 复制代码
	/**
	 * 返回全局单实例[弱引用缓存]<br>
	 * 弱引用存储的实例在没有被引用时会被JVM自动回收,下次调用自动创建新实例 
	 * @param <T> 实例类型变量
	 * @param clazz 实例类型
	 * @param parameterTypes 构造方法参数类型数组
	 * @param args 构造方法参数对象数组
	 */
	@AoWeakCacheable
	public static <T> T weakSingletonOf(Class<T>clazz,Class<?>[] parameterTypes,Object[]args){
		/** [反射]创建新实例  */
		return newInstance(clazz,parameterTypes,args);
	}

singletonOf

java 复制代码
	/**
	 * 返回全局单实例[缓存]<br>
	 * 运行时对给定输入参数返回同一实例
	 * @param <T> 实例类型变量
	 * @param clazz 实例类型
	 * @param parameterTypes 构造方法参数类型数组
	 * @param args 构造方法参数对象数组
	 */
	@AoCacheable
	public static <T> T singletonOf(Class<T>clazz,Class<?>[] parameterTypes,Object[]args){
		/** [反射]创建新实例  */
		return newInstance(clazz,parameterTypes,args);
	}

简单说,weakSingletonOfsingletonOf的不同就是:

weakSingletonOf返回的实例有可能不是同一个,因为如果JVM回收了实例,下次调用返回的就是一个新创建的实例。

而singletonOf是普通强引用模式保存实例,所以保证运行时对给定输入参数返回的都是同一实例

所以需要严格单实例的场景就使用singletonOf

只是出于减少实例创建次数的需要就使用weakSingletonOf

项目仓库

访问码云仓库获取完整代码及说明:
aocache: aocache(Aspect Oriented Cache)是一个基于aspectJ实现的方法缓存工具。 (gitee.com)

相关推荐
不懂英语的程序猿20 小时前
【Java 工具类】Java通过 TCP/IP 调用斑马打印机(完整实现)
java
多多*21 小时前
分布式系统中的CAP理论和BASE理论
java·数据结构·算法·log4j·maven
sg_knight21 小时前
Docker 实战:如何限制容器的内存使用大小
java·spring boot·spring·spring cloud·docker·容器·eureka
合作小小程序员小小店21 小时前
web网页开发,在线考勤管理系统,基于Idea,html,css,vue,java,springboot,mysql
java·前端·vue.js·后端·intellij-idea·springboot
随便叫个啥呢1 天前
java使用poi-tl模版+vform自定义表单生成word,使用LibreOffice导出为pdf
java·pdf·word
面向星辰1 天前
扣子开始节点和结束节点
java·服务器·前端
烤麻辣烫1 天前
黑马程序员苍穹外卖(新手)Day1
java·数据库·spring boot·学习·mybatis
失散131 天前
分布式专题——51 ES 深度分页问题及其解决方案详解
java·分布式·elasticsearch·架构
FreeBuf_1 天前
思科CCX软件曝高危RCE:攻击者可利用Java RMI和CCX Editor获取root权限
java·网络·安全
_esther_1 天前
【字符串String类大集合】构造创建_常量池情况_获取方法_截取方法_转换方法_String和基本数据类型互转方法
java