接续上文(java 实现的数据查询缓存通用模型——那些我在缓存模型中用到的工具类(5))
7、SPEL表达式支持
spel表达式,SpEL(Spring Expression Language),即spring 表达式语言,它是一种轻量的、灵活的语言,通过spring的解析工具进行解析。
在前文中,我们搭建实现的数据查询缓存通用模型,是通过cacheKeyCreater的机制来生成key的,这种方式可以实现很高的定制化,但是也有个缺点,那就是要写的代码更多,也不够直观。例如,先前的构造缓存按ID查询产品的Key,它的cacheKeyCreater代码需要写这么多:
public class ProductIdCacheKeyCreator implements DawnCacheKeyCreator {
public final static String CACHE_PER = "DAWN-CACHE-PRODUCT-ID";
/**
* 它的规则是:如果从参数中直接取到了id,那么直接使用该ID;如果参数中不包含ID,而是包含product,那么取product的id;之后使用前缀DAWN-CACHE-PRODUCT-ID加上`.`加上ID生成了KEY。
*
* @param request 请求
* @param target 注解的方法的所在对象
* @param method 注解的方法
* @param params 方法携带的参数Map<String,Object>
* @return Key 字符串
*/
@Override
public String createCacheKey(HttpServletRequest request, Object target, Method method, Map<String, Object> params) {
Object id = params.get("id");
if (id == null) {
Object product = params.get("product");
if (product instanceof Product p) {
id = p.getId();
}
}
if ((!(id instanceof Long))) {
return null;
}
return String.format("%s.%d", CACHE_PER, id);
}
@Override
public String createCacheEvictKey(String cacheMethodName, HttpServletRequest request, Object target, Method method, Map<