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

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

上一篇博客《java:aocache:基于aspectJ实现的方法缓存工具》介绍了aocache的基本使用,
介绍@AoCacheable注解时说过,@AoCacheable可以定义在构造方法上,定义在构造方法,该构建方法就成了单实例模式。

也就是说,只要构建方法参数相同,new 返回的实例都是同一个,示例如下:

	@Testpublic void test7Constructor() {try {Date d = new Date();TestUser user = new TestUser("jerry",0,d);log("user:{}",user);for(int i=0;i<5;++i) {TestUser o = new TestUser("jerry",0,d);log("u{}:{}",i,o);/** 每次 new 返回的都是同一个实例 */assertTrue(o == user);}} catch (Throwable e) {e.printStackTrace();fail(e.getMessage());}}private static class TestUser {String name;Integer age;Date birthdate;@AoCacheableTestUser() {this(null, null, null);}@AoCacheableprotected TestUser(String name, Integer age, Date birthdate) {this.name = name;this.age = age;this.birthdate = birthdate;}}

注意

  • @AoCacheable定义在私有(private)构造方法上无效,因为基于AspectJ的工作原理,它不能拦截私有构造方法。
  • 对于是否将@AoCacheable定义在构造方法上要认真考虑是否适合你的使用场景,因为一旦定义了将@AoCacheable注解定义在构造方法上,该方法new操作就不能创建新实例。

所以@AoCacheable定义在构造方法的使用方式是有限制的。因为就无法再创建新实例,如果又希望保持构造方法创建新实例,又能得到单实例缓存。建议不要在构造方法上定义@AcCacheable注解注解,而是定义一个有@AcCacheable注解的静态方法用于获取单实例,示例如下:

	protected TestUser(String name, Integer age, Date birthdate) {this.name = name;this.age = age;this.birthdate = birthdate;}@AcCacheablepublic static TestUser getSingleton(String name, Integer age, Date birthdate){new TestUser(name,age,birthdate);}

项目仓库

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

http://www.lryc.cn/news/388313.html

相关文章:

  • pcap包常见拆分方法
  • C++中的类型转换操作符:static_cast reinterpret_cast const_cast dynamic_cast
  • MySQL-SQL优化Explain命令以及参数详解
  • 别只会重启了!进来告诉你AP无法上线怎么办
  • 数据恢复篇:如何在 Android 手机上恢复未保存/删除的 Word 文档
  • Python | Leetcode Python题解之第208题实现Trie(前缀树)
  • Ethernet是以太网通讯
  • 咖啡消费旺季到来 为何想转让的库迪联营商却越来越多
  • 神经网络原理
  • 安卓应用开发学习:获取经纬度及地理位置描述信息
  • 各类排序方法 手撕快排 回顾经典快排 优化版快排
  • 独一无二的设计模式——单例模式(Java实现)
  • 使用MoA(Mixture of Agents)混合智能体技术,结合多个开源大语言模型如Llama3、phi-3和Mistral,实现一个强大的AI智能体
  • 前端面试题_Css
  • AI在线免费视频工具3:声音生视频
  • final、const、readonly关键字在不同语言中代表着什么
  • HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能
  • Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed
  • TextField是用于在用户界面中输入文本的控件。它广泛应用于表单、搜索框、评论区等需要用户输入文字的场景
  • MYSQL 四、mysql进阶 5(InnoDB数据存储结构)
  • Spring企业开发核心框架-下
  • X射线底片焊缝缺陷检测
  • 直播的js代码debug解析找到protobuf消息的定义
  • 详细学习es6扩展运算符
  • HEC-HMS水文模型教程
  • Spring Cloud LoadBalancer基础入门与应用实践
  • layui在表格中嵌入上传按钮,并修改上传进度条
  • 14-10 AIGC 项目生命周期——第一阶段
  • 经典小游戏(一)C实现——三子棋
  • 如何利用AI生成可视化图表(统计图、流程图、思维导图……)免代码一键绘制图表