Spirng Cache(第二篇)自定义配置
从3.1版开始,Spring Framework提供了对现有Spring应用程序透明地添加缓存的支持。与事务 支持类似,缓存抽象允许一致地使用各种缓存解决方案,而对代码的影响最小。
从Spring 4.1开始,通过JSR-107注释和更多自定义选项的支持,缓存抽象得到了显着改进。
这篇介绍下如果根据Spring 缓存注解实现我们的自定义配置
文章目录
自定义缓存key KeyGenerator
当Spel表达式(90%情况下都能满足)不能满足我们需求是可以使用自定义缓存key来实现,只需指定KeyGenerator
接口的实现类的bean名称
比如:key值添加后缀(Spel表达式也可以实现,这里只为演示)
@Cacheable(keyGenerator = "myKeyGenerator")
public Book findBookKeyGenerator(String isbn) {
return createBook(isbn);
}
KeyGenerator实现类,添加后缀
@Component
public class MyKeyGenerator implements KeyGenerator {
@Override
public Object generate(Object target, Method method, Object... params) {
String key = params[0] + "-MyKeyGenerator";
System.out.println(key);
return key;
}
}
单元测试
@Test
public void findBookKeyGenerator() {
Book book1 = bookService.findBook(ISBN);
Book book2 = bookService.findBookKeyGenerator(ISBN);
assert book1 != book2;
}
自定义缓存管理 CacheManager
这个缓存管理器只打印一句话,没有实现任何逻辑。具体的缓存委派给cacheManager
public class MyCacheManager implements CacheManager {
private final CacheManager cacheManager;
public MyCacheManager(CacheManager cacheManager) {
this.cacheManager = cacheManager;
}
@Override
public Cache getCache(String name) {
System.out.println("自定义缓存管理器,name=" + name);
return cacheManager.getCache(name);
}
@Override
public Collection<String>