java缓存在Spring的单个缓存中显示两个方法的结果
我有两个方法,第一个返回元素列表,第二个返回单个元素:
List<User> getUsersFromExternalSystem(List<Integer> userIds);
User getUserFromExternalSystem(Integer userId);
我希望Spring缓存这两个方法的结果,这样当调用元素列表方法(getUsersFromExternalSystem()
)时,它会缓存所提供id(userIds
)的结果,当使用先前提供给元素列表方法的id调用单元素方法(getUserFromExternalSystem()
)时,它会使用缓存
我可以简单地将@Cacheable
应用于这些方法,然后(如果我理解正确的话)在调用时:
getUsersFromExternalSystem(Arrays.asList(1, 2))
结果将被缓存,但当我调用
getUserFromExternalSystem(1);
缓存将不被使用。春天怎么做
# 1 楼答案
您可以使用以下方法。只有第一个方法
getUser(Integer id)
是可缓存的,而第二个方法只合并了getUser
调用的结果给自己注射一粒豆子然后打电话
self.getUser(id)
而不是this.getUser(id)
是必需的,因为
@Cacheable
只有在Spring代理bean上使用时才会被实际调用,并且this
不是代理。更多详细信息请参见Transactions, Caching and AOP: understanding proxy usage in Spring