From f19f7adaa2d2e2719c145109615c49c4a3ba9963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=B8=85?= <1474983351@qq.com> Date: Thu, 17 Oct 2024 20:40:21 +0800 Subject: [PATCH] =?UTF-8?q?optimize:=20=E6=A0=BC=E5=BC=8F=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../update/ModifyAttrsRecordProxyFactory.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/ModifyAttrsRecordProxyFactory.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/ModifyAttrsRecordProxyFactory.java index 351edda5..7157bcdf 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/ModifyAttrsRecordProxyFactory.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/update/ModifyAttrsRecordProxyFactory.java @@ -15,11 +15,11 @@ */ package com.mybatisflex.core.update; +import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.util.ClassUtil; +import com.mybatisflex.core.util.MapUtil; import org.apache.ibatis.javassist.util.proxy.ProxyFactory; import org.apache.ibatis.javassist.util.proxy.ProxyObject; -import org.apache.ibatis.logging.LogFactory; -import com.mybatisflex.core.util.MapUtil; import java.util.Arrays; import java.util.Map; @@ -32,6 +32,7 @@ import java.util.concurrent.ConcurrentHashMap; public class ModifyAttrsRecordProxyFactory { protected static final Map, Class> CACHE = new ConcurrentHashMap<>(); + private static final ModifyAttrsRecordProxyFactory INSTANCE = new ModifyAttrsRecordProxyFactory(); public static ModifyAttrsRecordProxyFactory getInstance() { @@ -41,30 +42,25 @@ public class ModifyAttrsRecordProxyFactory { private ModifyAttrsRecordProxyFactory() { } + @SuppressWarnings("unchecked") public T get(Class target) { Class proxyClass = MapUtil.computeIfAbsent(CACHE, target, aClass -> { - ProxyFactory factory = new ProxyFactory(); - factory.setSuperclass(target); - Class[] interfaces = Arrays.copyOf(target.getInterfaces(), target.getInterfaces().length + 1); interfaces[interfaces.length - 1] = UpdateWrapper.class; + ProxyFactory factory = new ProxyFactory(); + factory.setSuperclass(target); factory.setInterfaces(interfaces); - return factory.createClass(); }); - T proxyObject = null; + T proxyObject; try { - // noinspection unchecked proxyObject = (T) ClassUtil.newInstance(proxyClass); ((ProxyObject) proxyObject).setHandler(new ModifyAttrsRecordHandler()); } catch (Exception e) { - LogFactory.getLog(ModifyAttrsRecordProxyFactory.class).error("请为实体类添加公开的无参构造器!", e); + throw FlexExceptions.wrap(e, "请为实体类 %s 添加公开的无参构造器!", target.getCanonicalName()); } - return proxyObject; } + } - - -