@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);
}
}
there is some problem:
@Cacheable
是有效的,当我调用fetchUserById(Long userid)
。
但@Cacheable
无效,当我调用fetchCurrentUser()
。
你可以在这里找到解决方案:在同一个类中调用Spring cache @Cacheable方法时被忽略
这是因为代理是为处理缓存而创建的,事务相关的功能。这是一个非常好的Spring如何处理它的参考-事务,缓存和AOP:了解Spring中的代理使用
简而言之,self调用绕过动态代理和任何横切关注缓存,事务等,这是动态的一部分代理逻辑也被绕过。
修复方法是使用AspectJ编译时或加载时编织。