从同一类中调用时,Spring cache @Cacheable方法将被忽略
我试图@Cacheable
从同一个类中调用一个方法:
@Cacheable(value = "defaultCache", key = "#id")public Person findPerson(int id) {
return getSession().getPerson(id);
}
public List<Person> findPersons(int[] ids) {
List<Person> list = new ArrayList<Person>();
for (int id : ids) {
list.add(findPerson(id));
}
return list;
}
并希望findPersons
也缓存来自的结果,但是@Cacheable
注释将被忽略,并且findPerson
每次都会执行该方法。
我在这里做错什么了吗,或者这是故意的?
回答:
这是因为在Spring中创建代理来处理缓存,与事务相关的功能的方式。这是Spring如何处理它的很好参考- 事务
简而言之,自我调用会绕过动态代理,并且绕过动态代理逻辑一部分的所有交叉问题(例如缓存,事务等)也会被绕过。
解决方法是使用AspectJ编译时或加载时进行编织。
以上是 从同一类中调用时,Spring cache @Cacheable方法将被忽略 的全部内容, 来源链接: utcz.com/qa/430757.html