我在某些源代码中注意到了几行@CacheEvict(“ Settings”),并好奇是否与CacheEvict(value =“ Settings”,allEntries = true)相同?
最佳答案
如果在没有@CacheEvict
属性的情况下指定key
,则所有方法参数都将用于构造要逐出条目的键,因此
@CacheEvict("Settings")
public String doThing(String foo, Integer bar) {
// ...
}
...将使用复合键{
foo
,bar
}逐出该条目。用于构造复合键的默认键生成器是SimpleKeyGenerator
,它返回SimpleKey
实例,这些实例保存对方法参数的引用以进行比较。如果该方法没有参数,则默认键为
SimpleKey.EMPTY
。如果您确实指定了
allEntries
属性,则不能将属性true
设置为key
;它们是互斥的。如果将其设置为true
,则每次调用带注释的方法时,都会删除缓存中的所有条目。所以...
@CacheEvict("Settings", allEntries = true)
public String doThing(String foo, Integer bar) {
// ...
}
...每次调用方法时都会清空
Settings
缓存,而不管方法参数如何。