From 4e4177e13bb288343a076942e57072b3667c67ff Mon Sep 17 00:00:00 2001 From: fuzhengwei <184172133@qq.com> Date: Fri, 19 Feb 2021 18:40:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E5=82=85=E5=93=A5=EF=BC=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E8=B7=AF=E7=94=B1=E7=BB=84=E4=BB=B6=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/router/DBRouterJoinPoint.java | 14 +++++++++----- .../db/router/annotation/DBRouter.java | 6 ++++-- .../cn/bugstack/middleware/test/ApiTest.java | 19 ++++++++++++++++++- .../cn/bugstack/middleware/test/IUserDao.java | 16 ++++++++++++++++ 4 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 src/test/java/cn/bugstack/middleware/test/IUserDao.java diff --git a/src/main/java/cn/bugstack/middleware/db/router/DBRouterJoinPoint.java b/src/main/java/cn/bugstack/middleware/db/router/DBRouterJoinPoint.java index c4fd1bd..f560bf0 100644 --- a/src/main/java/cn/bugstack/middleware/db/router/DBRouterJoinPoint.java +++ b/src/main/java/cn/bugstack/middleware/db/router/DBRouterJoinPoint.java @@ -14,6 +14,7 @@ import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @@ -24,6 +25,7 @@ import java.lang.reflect.Method; * Create by 小傅哥(fustack) */ @Aspect +//@Order(1) @Component("db-router-point") public class DBRouterJoinPoint { @@ -36,12 +38,10 @@ public class DBRouterJoinPoint { public void aopPoint() { } - @Around("aopPoint()") - public Object doRouter(ProceedingJoinPoint jp) throws Throwable { + @Around("aopPoint() && @annotation(dbRouter)") + public Object doRouter(ProceedingJoinPoint jp, DBRouter dbRouter) throws Throwable { Method method = getMethod(jp); - DBRouter dbRouter = method.getAnnotation(DBRouter.class); -// String dbKey = dbRouter.key(); - String dbKey = "userId"; + String dbKey = dbRouter.key(); if (StringUtils.isBlank(dbKey)) throw new RuntimeException("annotation DBRouter key is null!"); // 计算路由 String dbKeyAttr = getAttrValue(dbKey, jp.getArgs()); @@ -66,6 +66,10 @@ public class DBRouterJoinPoint { private Method getMethod(JoinPoint jp) throws NoSuchMethodException { Signature sig = jp.getSignature(); MethodSignature methodSignature = (MethodSignature) sig; + + Class[] interfaces = getClass(jp).getInterfaces(); + + return getClass(jp).getMethod(methodSignature.getName(), methodSignature.getParameterTypes()); } diff --git a/src/main/java/cn/bugstack/middleware/db/router/annotation/DBRouter.java b/src/main/java/cn/bugstack/middleware/db/router/annotation/DBRouter.java index bf258e1..48e2f2d 100644 --- a/src/main/java/cn/bugstack/middleware/db/router/annotation/DBRouter.java +++ b/src/main/java/cn/bugstack/middleware/db/router/annotation/DBRouter.java @@ -2,13 +2,15 @@ package cn.bugstack.middleware.db.router.annotation; import java.lang.annotation.*; + /** * 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获! * 公众号:bugstack虫洞栈 * Create by 小傅哥(fustack) */ -//@Retention(RetentionPolicy.RUNTIME) -//@Target({ElementType.TYPE, ElementType.METHOD}) +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE, ElementType.METHOD}) public @interface DBRouter { String key() default ""; diff --git a/src/test/java/cn/bugstack/middleware/test/ApiTest.java b/src/test/java/cn/bugstack/middleware/test/ApiTest.java index d30ab44..14e1c92 100644 --- a/src/test/java/cn/bugstack/middleware/test/ApiTest.java +++ b/src/test/java/cn/bugstack/middleware/test/ApiTest.java @@ -1,7 +1,11 @@ package cn.bugstack.middleware.test; +import cn.bugstack.middleware.db.router.annotation.DBRouter; import org.junit.Test; +import java.lang.reflect.AnnotatedType; +import java.lang.reflect.Method; + /** * 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获! * 公众号:bugstack虫洞栈 @@ -33,9 +37,22 @@ public class ApiTest { } @Test - public void test_str_format(){ + public void test_str_format() { System.out.println(String.format("db%02d", 1)); System.out.println(String.format("_%02d", 25)); } + @Test + public void test_annotation() throws NoSuchMethodException { + Class iUserDaoClass = IUserDao.class; + Method method = iUserDaoClass.getMethod("insertUser", String.class); + + DBRouter dbRouter = method.getAnnotation(DBRouter.class); + + System.out.println(dbRouter.key()); + + } + } + + diff --git a/src/test/java/cn/bugstack/middleware/test/IUserDao.java b/src/test/java/cn/bugstack/middleware/test/IUserDao.java new file mode 100644 index 0000000..2f899ff --- /dev/null +++ b/src/test/java/cn/bugstack/middleware/test/IUserDao.java @@ -0,0 +1,16 @@ +package cn.bugstack.middleware.test; + +import cn.bugstack.middleware.db.router.annotation.DBRouter; + +/** + * 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获! + * 公众号:bugstack虫洞栈 + * Create by 小傅哥(fustack) + */ + +public interface IUserDao { + + @DBRouter(key = "userId") + void insertUser(String req); + +} -- GitLab