我使用org.springframework.cache.annotation.Cacheable
进行方法级缓存
public class Customer {
private Long id;
@Cacheable("customer",key="this.id")
public CustomerAddress findCustomerAddress() {...}
}
我想用key作为id来缓存客户对象。但我没有id作为方法参数。我把它作为实例字段?
答案 0 :(得分:0)
你不能轻易做到这一点,上面的代码有两个气味IMO:
address
缓存customer
Customer
(有一个)而不是子组件您已经对原始问题发表了很好的评论,我建议您查看当前的设计,以便缓存的对象具有自己的标识。如果你不能或不愿意,总有办法。
@Cacheable(cacheNames = "customer", keyGenerator="customerKeyGenerator")
public CustomerAddress findCustomerAddress() {...}
}
然后在某些@Configuration
类
@Bean
public KeyGenerator customerKeyGenerator() {
}
KeyGenerator
的API非常简单。例如,您可以检查目标实例是否为Customer
,然后检索id值。