diff --git a/src/main/java/org/redkale/boot/NodeServer.java b/src/main/java/org/redkale/boot/NodeServer.java index 1c707e4c9..95edbdcc4 100644 --- a/src/main/java/org/redkale/boot/NodeServer.java +++ b/src/main/java/org/redkale/boot/NodeServer.java @@ -451,7 +451,7 @@ public abstract class NodeServer { if (!Modifier.isPublic(serviceImplClass.getModifiers())) { continue; } - if (serviceImplClass.getAnnotation(SncpDyn.class) != null) { + if (Sncp.isSncpDyn(serviceImplClass)) { continue; //动态生成的跳过 } if (entry.isExpect()) { diff --git a/src/main/java/org/redkale/net/sncp/Sncp.java b/src/main/java/org/redkale/net/sncp/Sncp.java index 7cd64280e..fdf2ab41e 100644 --- a/src/main/java/org/redkale/net/sncp/Sncp.java +++ b/src/main/java/org/redkale/net/sncp/Sncp.java @@ -5,7 +5,10 @@ */ package org.redkale.net.sncp; -import java.lang.annotation.Annotation; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; import java.lang.reflect.*; import java.net.InetSocketAddress; import java.nio.ByteBuffer; @@ -54,6 +57,29 @@ public abstract class Sncp { md5 = d; } + /** + * 修饰由SNCP协议动态生成的class、和method + * 本地模式:动态生成的_DynLocalXXXXService类会打上@SncpDyn(remote = false) 的注解 + * 远程模式:动态生成的_DynRemoteXXXService类会打上@SncpDyn(remote = true) 的注解 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ + @Inherited + @Documented + @Target({METHOD, TYPE}) + @Retention(RUNTIME) + public static @interface SncpDyn { + + boolean remote(); + + Class type(); + + int index() default 0; //排列顺序, 主要用于Method + } + private Sncp() { } @@ -116,6 +142,10 @@ public abstract class Sncp { return service.getClass().getAnnotation(SncpDyn.class) != null; } + public static boolean isSncpDyn(Class serviceType) { + return serviceType.getAnnotation(SncpDyn.class) != null; + } + public static int getVersion(Service service) { if (service == null) { return -1; @@ -398,6 +428,7 @@ public abstract class Sncp { { av0 = cw.visitAnnotation(sncpDynDesc, true); av0.visit("remote", Boolean.FALSE); + av0.visit("type", Type.getType(Type.getDescriptor(serviceImplClass))); av0.visitEnd(); } { //给新类加上 原有的Annotation @@ -719,6 +750,7 @@ public abstract class Sncp { { av0 = cw.visitAnnotation(sncpDynDesc, true); av0.visit("remote", Boolean.TRUE); + av0.visit("type", Type.getType(Type.getDescriptor(serviceTypeOrImplClass))); av0.visitEnd(); } { //给新类加上 原有的Annotation diff --git a/src/main/java/org/redkale/net/sncp/SncpClient.java b/src/main/java/org/redkale/net/sncp/SncpClient.java index 83e6714f0..d5940e329 100644 --- a/src/main/java/org/redkale/net/sncp/SncpClient.java +++ b/src/main/java/org/redkale/net/sncp/SncpClient.java @@ -18,6 +18,7 @@ import org.redkale.convert.bson.*; import org.redkale.convert.json.*; import org.redkale.mq.*; import org.redkale.net.*; +import org.redkale.net.sncp.Sncp.SncpDyn; import static org.redkale.net.sncp.SncpRequest.*; import static org.redkale.net.sncp.SncpResponse.fillRespHeader; import org.redkale.service.*; diff --git a/src/main/java/org/redkale/net/sncp/SncpDyn.java b/src/main/java/org/redkale/net/sncp/SncpDyn.java deleted file mode 100644 index d64de39f5..000000000 --- a/src/main/java/org/redkale/net/sncp/SncpDyn.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.redkale.net.sncp; - -import java.lang.annotation.*; -import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * 修饰由SNCP协议动态生成的class、和method - * 本地模式:动态生成的_DynLocalXXXXService类会打上@SncpDyn(remote = false) 的注解 - * 远程模式:动态生成的_DynRemoteXXXService类会打上@SncpDyn(remote = true) 的注解 - * - *

详情见: https://redkale.org - * @author zhangjx - */ -@Inherited -@Documented -@Target({METHOD, TYPE}) -@Retention(RUNTIME) -public @interface SncpDyn { - - boolean remote(); - - int index() default 0; //排列顺序, 主要用于Method -} diff --git a/src/main/java/org/redkale/net/sncp/SncpServer.java b/src/main/java/org/redkale/net/sncp/SncpServer.java index a48365d7c..07d28df99 100644 --- a/src/main/java/org/redkale/net/sncp/SncpServer.java +++ b/src/main/java/org/redkale/net/sncp/SncpServer.java @@ -99,12 +99,15 @@ public class SncpServer extends Server