首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过根据返回类型动态获取仙人掌名在通用方法上应用缓存的Spring缓存

通过根据返回类型动态获取仙人掌名在通用方法上应用缓存的Spring缓存
EN

Stack Overflow用户
提问于 2022-03-06 21:41:02
回答 1查看 325关注 0票数 0

方法getById位于名为AbstractCachedResult的抽象类中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public abstract class AbstractCachedResult<T extends BaseResource> {

    @Cacheable(value = "dynamicName")
    public T getById(String id){
      //program logic
    }
}

许多其他服务类将从这个类继承。前任:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class UserService extends AbstractCachedResult<User> {
    
    //program logic
}

因为我在抽象类中设置了@Cacheable(value = "dynamicName"),所以我无法知道方法返回的类的类型。我需要能够动态地获取类的名称,以便在每次从继承的类调用方法时使用正确的缓存。

我遇到了另一个帖子。在这里,它们将实体类名作为参数传递,我无法这样做。我需要动态地获取返回数据的类型,以便我们可以使用@Caching注释,这是#2解决方案。有办法这样做吗?

EN

回答 1

Stack Overflow用户

发布于 2022-03-08 10:55:31

可以说,最简单和最明显的解决方案,尤其是对于维护人员来说,应该是重写子类中的getById(:String)方法,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class UserService extends AbstractCachedResult<User> {

    @Cacheable("UserCache")
    public User getById(String id) {
        super.id(id);
    }

    // additional logic
}

或者,您可以实现一个“自定义”CacheResolver (参见文档Javadoc),它能够检查(目标)子类的类通用签名。

最后,在底层用Spring实现了Spring的缓存抽象.对于真正的低级别控件,应该可以编写自定义的AOP拦截器,这与Spring的默认CacheInterceptor (Javadoc)没有什么不同。如果需要的话,您自己的AOP建议甚至可以相对于可缓存的建议进行排序。

老实说,我认为我上面提到的第一个选择是最好的方法。并不是每个服务类都需要缓存getById(:String)操作的结果。缓存实际上取决于数据的事务性质和数据更改的频率。

用你最好的判断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71376837

复制
相关文章
【Kotlin】扩展函数 ③ ( 定义扩展文件 | 重命名扩展函数 | Kotlin 标准库扩展函数 )
如果定义的 扩展函数 需要在 多个 Kotlin 代码文件 中使用 , 则需要在 单独的 Kotlin 文件 中定义 , 该文件被称为 扩展文件 ;
韩曙亮
2023/03/30
1.3K0
【Kotlin】扩展函数 ③ ( 定义扩展文件 | 重命名扩展函数 | Kotlin 标准库扩展函数 )
【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )
为 现有类 定义 扩展函数 , 可以在 不修改 原有类 的情况下 增加类的功能 ;
韩曙亮
2023/03/30
2.8K0
【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )
soapclient php 扩展,PHP扩展—SOAP[通俗易懂]
SOAP扩展可以用于编写SOAP服务器和客户端,支持 SOAP 1.1, SOAP 1.2 和 WSDL 1.1 规格的子集。
全栈程序员站长
2022/11/16
1.9K0
通过Excel文件批量生成Code 39扩展码
code39码是条形码的一种,编码简单、能够对任意长度的数据进行编码、支持设备广泛,所以code39码是最常用的条形码之一。code39码在条码打印软件中有两种表现类型:标准code39码和支持字符更全的扩展code39码。扩展型code39条形码要比标准型code39码要长。它还可以相同编码字符进行组合,使其显示整个范围内的128ASCII字符,其中包括标点、特殊符号和小写字母。 下面小编就用Excel文件中的数据批量生成Code 39码。
神奇像素科技
2022/01/12
7990
通过Excel文件批量生成Code 39扩展码
EF批量操作数据与缓存扩展框架
在原生的EF框架中,针对批量数据操作的接口有限,EF扩展框架弥补了EF在批量操作时的接口,这些批量操作包括:批量修改、批量查询、批量删除和数据缓存,如果您想在EF中更方便的批量操作数据,这个扩展将对您来说很有用。 下载安装 这个框架支持通过NuGet包管理器进行安装,你可以在包管理器中搜索:EntityFramework.Extended,最简单的方法就是程序包管理控制台进行安装,安装命令如下: PM > Install - Package EntityFramework.Extended 框架安装后,
逸鹏
2018/04/11
1.4K0
EF批量操作数据与缓存扩展框架
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
在上一篇博客 【Groovy】Groovy 扩展方法 ( Groovy 扩展方法引入 | 分析 Groovy 中 Thread 类的 start 扩展方法 ) 中 , 分析 Thread 的扩展方法 start 方法 , 该方法调用如下 ,
韩曙亮
2023/03/30
9710
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
什么是横向扩展和纵向扩展?
现代应用程序不断变化,随着新要求的发展而发展,并且存在于对资源的不同需求的环境中。扩展应用程序可以根据资源需求适当调整其大小,以确保客户满意并降低基础设施成本。
后场技术
2022/04/15
4.8K0
什么是横向扩展和纵向扩展?
python扩展
补充一些有趣的知识 1. sys模块方法的补充,打印进度条 import sys,time for i in range(20): sys.stdout.write("#") sys.stdout.flush() time.sleep(0.1)  2. 实现简单的shell sed替换功能 import sys res = sys.argv print(res) #命令行参数,在Terminal输入命令:python update_flie.py ,res接收到的结果为list
py3study
2020/01/16
9060
python扩展
扩展欧几里得
基本算法:设a=qb+r。当中a,b。q,r都是整数。则gcd(a,b)=gcd(b,r)。即gcd(a,b)=gcd(b,a%b)。
全栈程序员站长
2022/07/08
5010
DOM扩展
尽管DOM作为API已经非常完善了,但是为了实现更多的功能,仍然会有一些标准或专有的扩展。对DOM的两个主要扩展是Selectors API(选择符API)和HTML5。
奋飛
2019/08/15
1.5K0
Firefox 扩展开发 扩展学习 工具
要开发Firefox扩展当然需要一些工具和教程,这里根据笔者的所得,略略写一下: 教程:   教程嘛,网上基本没有什么中文资料,最多也就一个简单,非常简单的入门说明。所以教程还是以官网的为主:https://developer.mozilla.org/En 工具:   官网的教程中,会提到一些工具。   1.Firefox 3.0,这个肯定必不可少了。在此推荐3.0,因为最新版3.6或者3.7,那些扩展还没有更新跟进,所以要想安装更多的扩展,还是以3.0为好。   2.Firebug,这个不必多说。虽然我只
用户1258909
2018/07/03
7210
admin扩展
需要使用 django.contrib import admin 编写模型管理类,需要继承admin.ModelAdmin
爱喝水的木子
2022/01/12
5530
js扩展
扩展 定义对象 var zj = zj || {}; 字符串转json对象 /** * 字符串转json对象 */ zj.toJson = function(result) { if (typeof result == "string") { return eval("(" + result + ")"); } else { return result; } } 格式化字符串 /** * @author 张剑 使用方法:zj.formatStri
码客说
2019/10/22
1.2K0
【Kotlin】扩展函数作用域分析 ( 扩展函数导入 | 扩展函数重载 | 扩展函数作用域优先级 )
① 扩展函数作用域 : 扩展函数使用需要导入包 , 如果在本包中使用 , 可以默认不导入包 ;
韩曙亮
2023/03/27
8400
【Kotlin】扩展函数作用域分析 ( 扩展函数导入 | 扩展函数重载 | 扩展函数作用域优先级 )
Prometheus:扩展
2、Prometheus配置集群 ?????? 3、可配置远程存储 ????
用户5760343
2020/01/15
7400
WebService扩展
SOAP、WSDL、XML Schema 已经可以完成点到点的调用,但点到点的调用不能完全发挥面向服务的特点
hotarugali
2022/02/28
6580
WebService扩展
扩展 Sketch
我们努力使Sketch成为梦想中的“设计师工具箱”。但是每个人都有不同的需求,也许你需要一个我们还没有实现的功能。不要担心:插件已经可以满足您的需求,或者您可以轻松创建一个插件。 如果您有兴趣扩展Sketch,那么您就位于正确的位置。在这里,我们展示Sketch可扩展性文档的概要以及如何快速构建您的第一个Sketch插件。 如果您只想使用现有的插件,请参阅插件目录。 你可以用插件做什么? Sketch中的插件可以做任何用户可以做的事情(甚至更多!)。例如: 根据复杂的规则选择文档中的图层 操作图层属性 创建
iOSDevLog
2018/05/17
1.4K0
MySQL扩展
mysql中变量不用事前申明,在用的时候直接用“@变量名”。 第一种用法:set @num=1; 或set @num:=1; 第二种用法:select @num:=1; 也可以把字段的值赋值给变量 select @num:=字段名 from 表名 where …… 注意上面两种赋值符号,使用set时可以用 = 或 := ,但是使用select时必须用 :=
化羽羽
2022/10/28
2K0
【php 扩展开发】扩展生成器
每个php扩展都包含一些非常公共的并且非常单调的结构和文件,这些文件对所有扩展来说都是通用的。当开始一个新扩展开发的时候,如果这些公共的结构已经存在,而不需要费力去复制每个文件的内容, 我们只需考虑填充功能代码那心情一定会愉快很多。
猿哥
2019/03/13
7430
点击加载更多

相似问题

批量扩展通配符

12

参数通配符扩展

11

批量扩展星号

22

通配符java扩展

30

Jira问题/批量扩展?

19
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文