From cad250f02a66237258d1e96addd4704a1fdefb2f Mon Sep 17 00:00:00 2001 From: _老马_ <mayuanfei@163.com> Date: 星期三, 17 一月 2024 13:47:44 +0800 Subject: [PATCH] !479 update 优化 使用预扫描实体类提升代码性能 * 优化了数据库字段加解密的缓存机制.在自动配置类启动时,就把有加密注解的类进行缓存,以提高速度. --- ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java | 30 +++++++++++++++++------------- 1 files changed, 17 insertions(+), 13 deletions(-) diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java index 07c5675..c2b9cae 100644 --- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/core/EncryptorManager.java @@ -1,15 +1,14 @@ package org.dromara.common.encrypt.core; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; -import org.dromara.common.encrypt.annotation.EncryptField; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.Field; -import java.util.Arrays; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import java.util.stream.Collectors; /** * 鍔犲瘑绠$悊绫� @@ -18,6 +17,7 @@ * @version 4.6.0 */ @Slf4j +@NoArgsConstructor public class EncryptorManager { /** @@ -31,19 +31,23 @@ Map<Class<?>, Set<Field>> fieldCache = new ConcurrentHashMap<>(); /** + * 鏋勯�犳柟娉曚紶鍏ョ被鍔犲瘑瀛楁缂撳瓨 + * + * @param fieldCache 绫诲姞瀵嗗瓧娈电紦瀛� + */ + public EncryptorManager(Map<Class<?>, Set<Field>> fieldCache) { + this.fieldCache = fieldCache; + } + + + /** * 鑾峰彇绫诲姞瀵嗗瓧娈电紦瀛� */ public Set<Field> getFieldCache(Class<?> sourceClazz) { - return fieldCache.computeIfAbsent(sourceClazz, clazz -> { - Field[] declaredFields = clazz.getDeclaredFields(); - Set<Field> fieldSet = Arrays.stream(declaredFields).filter(field -> - field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class) - .collect(Collectors.toSet()); - for (Field field : fieldSet) { - field.setAccessible(true); - } - return fieldSet; - }); + if(ObjectUtil.isNotNull(fieldCache)) { + return fieldCache.get(sourceClazz); + } + return null; } /** -- Gitblit v1.9.3