接口KeyGenerator

image.png

要实现自定义,要实现spring提供的接口KeyGenerator

package org.springframework.cache.interceptor;

helper

fastjson

public class JsonHelper {

/**

* Java对象序列化为JSON字符串

*

* @param obj Java对象

* @return json字符串

*/

public static String toJson(Object obj) {

return JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue);

}

}

beanHelper

package com.ghgcn.mysb.chapter03.helper;

import org.springframework.util.ClassUtils;

import java.net.URI;

import java.net.URL;

import java.util.Date;

import java.util.Locale;

public class BeanHelper {

/**

* 判断是否是简单值类型.包括:基础数据类型、CharSequence、Number、Date、URL、URI、Locale、Class;

*

* @param clazz

* @return

*/

public static boolean isSimpleValueType(Class> clazz) {

return (ClassUtils.isPrimitiveOrWrapper(clazz) || clazz.isEnum() || CharSequence.class.isAssignableFrom(clazz)

|| Number.class.isAssignableFrom(clazz) || Date.class.isAssignableFrom(clazz) || URI.class == clazz

|| URL.class == clazz || Locale.class == clazz || Class.class == clazz);

}

}

SpringCacheKeyGenerator

package com.ghgcn.mysb.chapter03.support;

import com.ghgcn.mysb.chapter03.helper.BeanHelper;

import com.ghgcn.mysb.chapter03.helper.JsonHelper;

import org.springframework.cache.interceptor.KeyGenerator;

import java.lang.reflect.Method;

@Component //标记为组件

public class SpringCacheKeyGenerator implements KeyGenerator {

private final static int NO_PARAM_KEY = 0;

private String keyPrefix = "jf";// key前缀,用于区分不同项目的缓存,建议每个项目单独设置

@Override

public Object generate(Object target, Method method, Object... params) {

char sp = ':';

StringBuilder strBuilder = new StringBuilder(30);

strBuilder.append(keyPrefix);

strBuilder.append(sp);

// 类名

strBuilder.append(target.getClass().getSimpleName());

strBuilder.append(sp);

// 方法名

strBuilder.append(method.getName());

strBuilder.append(sp);

if (params.length > 0) {

// 参数值

for (Object object : params) {

if (BeanHelper.isSimpleValueType(object.getClass())) {

strBuilder.append(object);

} else {

strBuilder.append(JsonHelper.toJson(object).hashCode());

}

}

} else {

strBuilder.append(NO_PARAM_KEY);

}

return strBuilder.toString();

}

public String getKeyPrefix() {

return keyPrefix;

}

public void setKeyPrefix(String keyPrefix) {

this.keyPrefix = keyPrefix;

}

}

java keygenerator_spring-cache -KeyGenerator自定义相关推荐

  1. java中Cache缓存的使用

    java中Cache缓存 1.JSR107 缓存的整体架构: 2.SpringBoot的缓存抽象 几个重要概念以及缓存注解 其中想要使用缓存直接,就必须开启**@EnableCaching**注解 开 ...

  2. Java之——Spring AOP自定义注解实现日志管理

    转载请注明出处:https://blog.csdn.net/l1028386804/article/details/80295737 1.定义日志类SystemLog package io.mykit ...

  3. Java httpClient中实现自定义DNS服务器地址配置

    这个故事从一个小的需求开始. 在知乎编辑器中,链接插入以后可以选择转化为一个链接卡片,用户体验太棒了.这么好的点子,我们必须学(chao)习(xi)过来啊. 这个事情就这么被安排给了我们的前端同学.. ...

  4. java sessionstate_在Java Web开发中自定义Session

    Session在存储安全性要求较高的会话信息方面是必不可少的,对于分布式Web应用自定义Session支持独立的状态服务器或集群是必须的.本文就来教大家如何在Java Web开发中自定义Session ...

  5. 怎么在java中创建一个自定义的collector

    文章目录 简介 Collector介绍 自定义Collector 总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream ...

  6. Java高级进阶:自定义ClassLoader

    转载自 Java高级进阶:自定义ClassLoader 假如我们的类不在classpath下,而我们又想读取一个自定义的目录下的class,如果做呢? 读取自定义目录的类 示例读取c:/test/co ...

  7. c++中的new_怎么在java中创建一个自定义的collector

    简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为特定的集合类. 今 ...

  8. java注解 源码_详解Java注解教程及自定义注解

    详解Java注解教程及自定义注解 更新时间:2016-02-26 11:47:06   作者:佚名   我要评论(0) Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个 ...

  9. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  10. java 可以直接当自定义标示符_第2章 Java基本语法.ppt

    <第2章 Java基本语法.ppt>由会员分享,可在线阅读,更多相关<第2章 Java基本语法.ppt(55页珍藏版)>请在人人文库网上搜索. 1.第2章了解Java基本语法, ...

最新文章

  1. a-awk 计算数值最大,最小,平均值并保留指定位数
  2. 避免成为调包侠,从数学角度再看深度学习
  3. Java使用jfreechart画饼图_jfreechart应用_例题_生成饼状图(展示,生成文件,WEB项目)_可以直接运行...
  4. linux 大文件切割和合并 tar分割和合并
  5. 指令发送没反应_如何判断网络故障的原因?7个指令,教你逐步排查!
  6. python不需要缩进的代码顶行编写_python程序快速缩进多行代码方法总结
  7. linux 1080ti显卡黑屏,Ubuntu 17.04+GTX1080Ti 安装辛酸之路
  8. 有了这套模板,女朋友再也不用担心我刷不动 LeetCode 了
  9. 找出现实中符合这三种模式的互联网产品
  10. pandas之时间数据
  11. 图形学opengl实验二-桌子的矩阵变换
  12. 吴恩达机器学习视频学习笔记(3)
  13. C#/.Net 的托管堆和垃圾回收
  14. 请求转发 tomcat 404错误
  15. 利用Python3中turtle的绘制超立方体。
  16. 数字图像处理-第一章
  17. js根据邮箱账号跳转登录邮箱地址
  18. 实习--广东电信有限公司汕头市分公司讲座
  19. js Web APIs
  20. 今天是印度已故心算大师Shakuntala Devi的84岁诞辰

热门文章

  1. 等待多个并发事件完成的模型
  2. 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证
  3. UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式
  4. 虚拟机模拟WIN2008创建域控制器与故障转移群集
  5. Windows 2008 R2 SP1部署Exchange2010 SP1(原创)
  6. BGP MPLS中MCE技术介绍
  7. 如何保护企业网络免受DDoS攻击?—Vecloud微云
  8. CentOS系统设置开机自启动
  9. Java注解(Annotation)详解
  10. 九种浏览器端缓存机制知多少(转)