diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InnerGlobalInterceptor.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InnerGlobalInterceptor.java index 9a4cf798..f3844a64 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InnerGlobalInterceptor.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InnerGlobalInterceptor.java @@ -42,8 +42,12 @@ public class InnerGlobalInterceptor implements Interceptor { */ private static final InterceptorWrapper interceptorWrapper = new InterceptorWrapper(InnerGlobalInterceptor.class.getSimpleName()); + public InnerGlobalInterceptor() { + System.out.println("aaaaa"); + } + @Override - public void intercept(Invocation inv) { + public void intercept(Invocation inv) throws Exception { interceptorWrapper.intercept(inv); } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InterceptorWrapper.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InterceptorWrapper.java index 6533c96e..8dde79c4 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InterceptorWrapper.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/interceptor/InterceptorWrapper.java @@ -51,7 +51,7 @@ public class InterceptorWrapper implements Interceptor { } @Override - public void intercept(Invocation inv) { + public void intercept(Invocation inv) throws Exception { try { log.debug("拦截器:{} class:{} method:{} args:{} before", this.name, inv.getTargetClass().getName(), inv.getTargetMethod().getName(), inv.getArgs()); if (CollectionUtil.notEmpty(filterList)) { @@ -89,6 +89,7 @@ public class InterceptorWrapper implements Interceptor { } } } + throw e; } } diff --git a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/JdkDynamicProxyFactory.java b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/JdkDynamicProxyFactory.java index 629d4bda..f01cc922 100644 --- a/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/JdkDynamicProxyFactory.java +++ b/neutrino-core/src/main/java/fun/asgc/neutrino/core/aop/proxy/JdkDynamicProxyFactory.java @@ -22,13 +22,12 @@ 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.*; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; +import java.util.Set; /** * JDK动态代理 @@ -82,7 +81,16 @@ public class JdkDynamicProxyFactory implements ProxyFactory { } return null; }, args); - inv.invoke(); + try { + inv.invoke(); + } catch (Exception e) { + Set> exceptionTypes = ReflectUtil.getExceptionTypes(method); + if (CollectionUtil.notEmpty(exceptionTypes) && exceptionTypes.contains(e.getClass())) { + throw e; + } else { + e.printStackTrace(); + } + } return inv.getReturnValue(); } } diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Panda.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Panda.java index 6e5e39fc..558699dc 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Panda.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Panda.java @@ -54,4 +54,8 @@ public class Panda { public String request(String a, String b) { return String.format("参数 a:%s b:%s 处理结果", a, b); } + + public void up() throws Exception { + throw new Exception("跳太高,摔死了!"); + } } diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Test2.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Test2.java index 4fff870e..bee9a392 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Test2.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/aop/Test2.java @@ -107,4 +107,14 @@ public class Test2 { Panda panda = Aop.get(Panda.class); panda.request("xxx", "yyy"); } + + @Test + public void up() { + Panda panda = Aop.get(Panda.class); + try { + panda.up(); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/Test1.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/Test1.java index fe488c07..5dd04d93 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/Test1.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/Test1.java @@ -59,6 +59,10 @@ public class Test1 implements ApplicationRunner { user2.setEmail("liba@qq.com"); user2.setSex("男"); user2.setCreateTime(new Date()); - System.out.println(userMapper.add(user2)); + try { + System.out.println(userMapper.add(user2)); + } catch (Exception e) { + e.printStackTrace(); + } } } diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestExceptionHandler.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestExceptionHandler.java index 9a5df850..69713d5e 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestExceptionHandler.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestExceptionHandler.java @@ -25,6 +25,11 @@ import java.sql.SQLException; @Slf4j public class TestExceptionHandler implements ExceptionHandler { + /** + * 此处若拦截成功,则全局异常拦截不会执行 + * @param e + * @return + */ @Override public boolean support(Exception e) { // return e instanceof SQLException; diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestGlobalExceptionHandler.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestGlobalExceptionHandler.java index 5064e975..1d2ac469 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestGlobalExceptionHandler.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/TestGlobalExceptionHandler.java @@ -25,9 +25,14 @@ import lombok.extern.slf4j.Slf4j; @Component public class TestGlobalExceptionHandler implements ExceptionHandler { + /** + * + * @param e + * @return + */ @Override public boolean support(Exception e) { - return true; + return false; } @Override diff --git a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/UserMapper.java b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/UserMapper.java index f8f816c6..40f67485 100644 --- a/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/UserMapper.java +++ b/neutrino-core/src/test/java/fun/asgc/neutrino/core/db/mapper/UserMapper.java @@ -49,5 +49,5 @@ public interface UserMapper extends SqlMapper { int count(); @Insert("insert into user(`id`,`name`,`age`,`email`,`sex`,`create_time`) values(:id,:name,:age,:email,:sex,:createTime)") - int add(User user); + int add(User user) throws Exception; }