cacheable 将一个对象作为key_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > cacheable 将一个对象作为key

cacheable 将一个对象作为key

 2020/9/2 12:17:26  PXY  程序员俱乐部  我要评论(0)
  • 摘要:@Cacheable(value={"userLogs"},keyGenerator="cacheKeyGenerator")packagecom.opencloud.common.configuration;importlombok.extern.slf4j.Slf4j;importorg.springframework.cache.interceptor.KeyGenerator;importorg.springframework.cache.interceptor.SimpleKey
  • 标签:KEY 一个

@Cacheable(value = {"userLogs"}, keyGenerator = "cacheKeyGenerator" )

?

?

?

package com.opencloud.common.configuration;

?

import lombok.extern.slf4j.Slf4j;

import org.springframework.cache.interceptor.KeyGenerator;

import org.springframework.cache.interceptor.SimpleKey;

import org.springframework.stereotype.Component;

?

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

?

// 缓存key 生成器

@Slf4j

@Component

public class CacheKeyGenerator implements KeyGenerator {

?

? ? @Override

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

? ? ? ? if(params.length == 0){

? ? ? ? ? ? return SimpleKey.EMPTY;

? ? ? ? }

? ? ? ? StringBuilder key = new StringBuilder();

? ? ? ? for (Object param : params) {

? ? ? ? ? ? //此处处理的是一个对象 如果是Map需自行验证是否可行

? ? ? ? ? ? Field[] fields = getAllFields(param.getClass());

? ? ? ? ? ? for(Field field:fields) {

? ? ? ? ? ? ? ? //抑制Java对修饰符的检查

? ? ? ? ? ? ? ? field.setAccessible(true);

? ? ? ? ? ? ? ? try {

//? ? ? ? ? ? ? ? ? ? log.info("fieldName:{} fieldVuale:{}",field.getName(),field.get(param));

? ? ? ? ? ? ? ? ? ? key.append(field.getName()+"="+field.get(param)+" , ");

? ? ? ? ? ? ? ? } catch (IllegalAccessException e) {

? ? ? ? ? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? ? ? }

?

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return key;

? ? }

?

? ? /**

? ? ?* 获取本类以及父类的属性方法

? ? ?* @param clazz 当前类对象

? ? ?* @return 字段数组

? ? ?*/

? ? private static Field[] getAllFields(Class<?> clazz){

? ? ? ? List<Field> fieldList = new ArrayList<>();

? ? ? ? while (clazz != null){

? ? ? ? ? ? fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));

? ? ? ? ? ? clazz = clazz.getSuperclass();

? ? ? ? }

? ? ? ? Field[] fields = new Field[fieldList.size()];

? ? ? ? return fieldList.toArray(fields);

? ? }

?

??

}

发表评论
用户名: 匿名