diff --git a/src/main/java/org/redkale/net/sncp/Sncp.java b/src/main/java/org/redkale/net/sncp/Sncp.java index 2099cf8f0..028b627e3 100644 --- a/src/main/java/org/redkale/net/sncp/Sncp.java +++ b/src/main/java/org/redkale/net/sncp/Sncp.java @@ -61,7 +61,7 @@ public abstract class Sncp { boolean remote(); - Class type(); + Class type(); //resourceServiceType int index() default 0; //排列顺序, 主要用于Method } @@ -227,9 +227,14 @@ public abstract class Sncp { return type != null ? type.value() : service.getClass(); } - public static Class getServiceType(Service service) { - return isSncpDyn(service) && service.getClass().getSimpleName().startsWith("_Dyn") ? service.getClass().getSuperclass() : service.getClass(); + public static Class getResourceType(Class serviceImplClass) { + ResourceType type = serviceImplClass.getAnnotation(ResourceType.class); + return type != null ? type.value() : serviceImplClass; } +// +// public static Class getServiceType(Service service) { +// return isSncpDyn(service) && service.getClass().getSimpleName().startsWith("_Dyn") ? service.getClass().getSuperclass() : service.getClass(); +// } public static AnyValue getResourceConf(Service service) { if (service == null || !isSncpDyn(service)) { @@ -473,7 +478,7 @@ public abstract class Sncp { { av0 = cw.visitAnnotation(sncpDynDesc, true); av0.visit("remote", Boolean.FALSE); - av0.visit("type", Type.getType(Type.getDescriptor(serviceImplClass))); + av0.visit("type", Type.getType(Type.getDescriptor(getResourceType(serviceImplClass)))); av0.visitEnd(); } { //给新类加上 原有的Annotation diff --git a/src/main/java/org/redkale/net/sncp/SncpDynServlet.java b/src/main/java/org/redkale/net/sncp/SncpDynServlet.java index 6de06565c..9f77d066e 100644 --- a/src/main/java/org/redkale/net/sncp/SncpDynServlet.java +++ b/src/main/java/org/redkale/net/sncp/SncpDynServlet.java @@ -49,7 +49,7 @@ public final class SncpDynServlet extends SncpServlet { this.maxNameLength = maxNameLength; this.serviceid = Sncp.serviceid(serviceResourceName, serviceResourceType); RedkaleClassLoader.putReflectionPublicMethods(service.getClass().getName()); - for (Map.Entry en : Sncp.loadMethodActions(service.getClass()).entrySet()) { + for (Map.Entry en : Sncp.loadMethodActions(serviceResourceType).entrySet()) { SncpServletAction action; try { action = SncpServletAction.create(service, serviceid, en.getKey(), en.getValue()); diff --git a/src/main/java/org/redkale/net/sncp/SncpOldClient.java b/src/main/java/org/redkale/net/sncp/SncpOldClient.java index 0ce942fcf..00d9f6dcd 100644 --- a/src/main/java/org/redkale/net/sncp/SncpOldClient.java +++ b/src/main/java/org/redkale/net/sncp/SncpOldClient.java @@ -85,7 +85,7 @@ public final class SncpOldClient { this.serviceid = Sncp.serviceid(serviceResourceName, serviceResourceType); final List methodens = new ArrayList<>(); //------------------------------------------------------------------------------ - for (Map.Entry en : Sncp.loadMethodActions(serviceClass).entrySet()) { + for (Map.Entry en : Sncp.loadMethodActions(serviceResourceType).entrySet()) { methodens.add(new SncpServiceAction(serviceClass, en.getValue(), serviceid, en.getKey())); } this.actions = methodens.toArray(new SncpServiceAction[methodens.size()]); diff --git a/src/main/java/org/redkale/service/AbstractService.java b/src/main/java/org/redkale/service/AbstractService.java index e055d95f6..55989a7b6 100644 --- a/src/main/java/org/redkale/service/AbstractService.java +++ b/src/main/java/org/redkale/service/AbstractService.java @@ -28,7 +28,7 @@ public abstract class AbstractService implements Service { * @return Class */ protected Class serviceType() { - return Sncp.getServiceType(this); + return Sncp.isSncpDyn(this) && getClass().getSimpleName().startsWith("_Dyn") ? getClass().getSuperclass() : getClass(); } /**