From 039d8337ffbd7154dab4718585eaaf5e7b97376e Mon Sep 17 00:00:00 2001 From: aoshiguchen <1052045476@qq.com> Date: Mon, 27 Jun 2022 11:22:30 +0800 Subject: [PATCH] =?UTF-8?q?aop=E9=80=BB=E8=BE=91=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/fun/asgc/neutrino/core/aop/Aop.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/Aop.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/Aop.java index d79d2718..506c537a 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/Aop.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/Aop.java @@ -24,7 +24,10 @@ package fun.asgc.neutrino.core.aop; import fun.asgc.neutrino.core.aop.proxy.Proxy; import fun.asgc.neutrino.core.aop.proxy.ProxyFactory; import fun.asgc.neutrino.core.aop.proxy.ProxyStrategy; +import fun.asgc.neutrino.core.cache.Cache; +import fun.asgc.neutrino.core.cache.MemoryCache; import fun.asgc.neutrino.core.util.Assert; +import fun.asgc.neutrino.core.util.LockUtil; /** * @@ -34,9 +37,14 @@ import fun.asgc.neutrino.core.util.Assert; public class Aop { private static final ProxyStrategy proxyStrategy = ProxyStrategy.SUB_CLASS_PROXY; private static final ProxyFactory proxyFactory = Proxy.getProxyFactory(proxyStrategy); + private static final Cache, Object> proxyBeanCache = new MemoryCache<>(); public static T get(Class clazz) { Assert.notNull(proxyFactory, "代理工厂初始化异常!"); - return proxyFactory.get(clazz); + return (T)LockUtil.doubleCheckProcess(() -> !proxyBeanCache.containsKey(clazz), + clazz, + () -> proxyBeanCache.set(clazz, proxyFactory.get(clazz)), + () -> proxyBeanCache.get(clazz) + ); } }