diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/ProxyFactory.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/ProxyFactory.java index 07e72e2c..8b207d09 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/ProxyFactory.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/ProxyFactory.java @@ -34,4 +34,11 @@ public interface ProxyFactory { * @return */ T get(Class clazz); + + /** + * 是否能被代理 + * @param clazz + * @return + */ + boolean canProxy(Class clazz); } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/SubClassProxyFactory.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/SubClassProxyFactory.java index c8310744..c35c3faa 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/SubClassProxyFactory.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/SubClassProxyFactory.java @@ -23,6 +23,8 @@ package fun.asgc.neutrino.core.aop.proxy; import fun.asgc.neutrino.core.aop.Invocation; import fun.asgc.neutrino.core.util.ArrayUtil; +import fun.asgc.neutrino.core.util.Assert; +import fun.asgc.neutrino.core.util.ClassUtil; import fun.asgc.neutrino.core.util.StringUtil; import lombok.extern.slf4j.Slf4j; @@ -47,6 +49,7 @@ public class SubClassProxyFactory implements ProxyFactory { @Override public T get(Class clazz) { + Assert.isTrue(canProxy(clazz), String.format("类[%s]无法被代理!", clazz.getName())); try { return doGet(clazz); } catch (ReflectiveOperationException e) { @@ -54,6 +57,11 @@ public class SubClassProxyFactory implements ProxyFactory { } } + @Override + public boolean canProxy(Class clazz) { + return !ClassUtil.isFinal(clazz) && !ClassUtil.isAbstract(clazz) && ClassUtil.isPublic(clazz) && !ClassUtil.isStatic(clazz); + } + private T doGet(Class clazz) throws ReflectiveOperationException { ProxyClass proxyClass = new ProxyClass(clazz); proxyClass.setName(generateClassName(clazz)); diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Dog.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Dog.java index e26db2a3..59a2529c 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Dog.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Dog.java @@ -27,7 +27,7 @@ package fun.asgc.neutrino.core.aop; * @date: 2022/6/23 */ @Intercept({TestInterceptor.class, TestInterceptor2.class}) -public class Dog { + class Dog { public Dog() { System.out.println("狗出生"); }