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

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

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

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

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);
	}

简单说,weakSingletonOf和singletonOf的不同就是:

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

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

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

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

项目仓库

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

相关推荐
特立独行的猫A16 分钟前
cj-tauri:用仓颉写桌面与鸿蒙 PC 应用
java·后端·python
Lonely丶墨轩21 分钟前
从一个 404 到负数 ID:第三方接口开发中的几次排错
java
聪明的笨猪猪27 分钟前
实际工程问题:AI生成MyBatis批量操作的SQL超限与性能雪崩
java·经验分享·面试·ai编程
文丑颜不良啊27 分钟前
LeetCode2501~2520题目解析
java·leetcode
瑞雪兆丰年兮43 分钟前
JavaWeb-day07-MySQL(DQL&多表设计)
java·开发语言·数据库·sql·mysql·javaweb·web
唐老板1 小时前
Spring Boot 4 默认开虚拟线程,HikariCP 却成瓶颈
java
2601_9621066411 小时前
【Java Set综合实战】商品管理系统 + 图书收藏系统|Product、Book自定义类全套代码
java
RuoyiOffice11 小时前
SpringBoot+Vue3 凭证生命周期设计:审核、过账、冲销与反过账怎样保持账目一致
java·spring boot·事务·springboot3·财务系统·会计凭证·ruoyi office
衡石科技12 小时前
兼顾查询速度与数据时效:衡石的缓存和分析加速
缓存·数据缓存·数据时效
2601_9621066412 小时前
HashMap入门|工号-姓名键值存储、两种遍历方式、根据key/value查
java