spring - 当我间接调用方法时,为什么@Cacheable 无效?
问题描述
@Cacheable @CacheEvict 无效
我有这样的服务:
@service
pubic class TestService {
@Cacheable(cacheNames ="user",key = "#userId")
public User fetchUserById(Long userid) {
return new User();
}
public User fetchCurrentUser() {
return fetchUserById(124L);
}
}
有一些问题:
@Cacheable
是有效的,当我调用fetchUserById(Long userid)
.
但@Cacheable
无效,当我调用fetchCurrentUser()
.
解决方案
您可以在此处找到解决方案:Spring cache @Cacheable 方法在从同一类中调用时被忽略
这是因为在 Spring 中为处理缓存、事务相关功能创建代理的方式。这是关于 Spring 如何处理它的一个很好的参考 - 事务、缓存和 AOP:理解 Spring 中的代理使用
简而言之,自调用绕过了动态代理,并且也绕过了作为动态代理逻辑一部分的缓存、事务等任何横切关注点。
解决方法是使用 AspectJ 编译时间或加载时间编织。
推荐阅读
- javascript - ExtJS 单例实用程序类别名
- python - 本地主机中套接字之间的数据传输的预期延迟是多少?
- html - 如何同时考虑响应的宽度和高度?
- unity3d - 如何通过命令行检查 Unity Project 的 ReSharper 代码检查?
- nginx - 基于 Nginx 路径的路由
- functional-programming - 有没有办法编写功能文档-事务性聊天机器人?
- php - PHP 在命令提示符 Windows 中不可执行,已设置环境变量
- django - 我可以使用 celery 来处理上传文件到第三方服务器的过程吗?
- python - 如何在 PyQt5 中嵌入 MetPy SkewT 图
- java - @Startup @Singleton EJB bean 和 JBAS011469:执行此操作需要事务