当前位置: 首页 > 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);}
http://www.lryc.cn/news/384437.html

相关文章:

  • c++11 abi 兼容性
  • 获取个人免费版Ubuntu Pro
  • Pinia的基本用法
  • 正版软件 | DeskScapes:将您的桌面变成生动的画布
  • OpenCV cv::Mat到 Eigen 的正确转换——cv2eigen
  • PostgreSQL的扩展(extensions)-常用的扩展-pg_pathman
  • 数据结构之树
  • 6毛钱SOT-23封装28V、400mA 开关升压转换器,LCD偏置电源和白光LED应用芯片TPS61040
  • saga模型
  • 深度神经网络:解锁智能的密钥
  • 国际现货黄金最新价格如何分析?结合较高的时间周期
  • 微服务和kafka
  • Jetpack架构组件_Navigaiton组件_1.Navigaiton切换Fragment
  • [计算机网络] 虚拟局域网
  • LabVIEW遇到无法控制国外设备时怎么办
  • .hmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • Redis发布、订阅模式(Pub/Sub)详解
  • Django-开发一个列表页面
  • flink 处理函数和流转换
  • 详细分析Springmvc中的@ModelAttribute基本知识(附Demo)
  • 和利时SIS安全系统模块SGM210 SGM210-A02
  • 浔川3样AI产品即将上线!——浔川总社部
  • 小阿轩yx-MySQL索引、事务
  • 搞定求职难题:工作岗位列表+简历制作工具 | 开源专题 No.75
  • JavaWeb——MySQL数据库:约束
  • JS(JavaScript)入门指南(DOM、事件处理、BOM、数据校验)
  • 江协科技51单片机学习- p16 矩阵键盘
  • grpc学习golang版( 四、多服务示例)
  • Linux安装jdk17
  • Java家教系统小程序APP公众号h5源码