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> getCacheNames() {
return cacheManager.getCacheNames();
}
}
缓存配置,一个是我们自定义的缓存管理器,

本文介绍了Spring Cache的自定义配置,包括自定义缓存key的KeyGenerator、自定义缓存管理器CacheManager、自定义缓存解析器CacheResolver、同步缓存sync属性的使用,以及条件缓存condition和unless的配置。通过实例展示了如何根据业务需求扩展Spring Cache的功能。
最低0.47元/天 解锁文章
1011





