从同一类中调用时,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

回到顶部