为什么@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);
}
}

there is some problem:

@Cacheable是有效的,当我调用fetchUserById(Long userid)

@Cacheable无效,当我调用fetchCurrentUser()

你可以在这里找到解决方案:在同一个类中调用Spring cache @Cacheable方法时被忽略

这是因为代理是为处理缓存而创建的,事务相关的功能。这是一个非常好的Spring如何处理它的参考-事务,缓存和AOP:了解Spring中的代理使用

简而言之,self调用绕过动态代理和任何横切关注缓存,事务等,这是动态的一部分代理逻辑也被绕过。

修复方法是使用AspectJ编译时或加载时编织。

相关内容

  • 没有找到相关文章

最新更新