diff --git a/src/main/java/org/redkale/boot/ClassFilter.java b/src/main/java/org/redkale/boot/ClassFilter.java index 70e137bdb..259daf58b 100644 --- a/src/main/java/org/redkale/boot/ClassFilter.java +++ b/src/main/java/org/redkale/boot/ClassFilter.java @@ -5,9 +5,6 @@ */ package org.redkale.boot; -import org.redkale.util.AutoLoad; -import org.redkale.util.AnyValue; -import org.redkale.util.AnyValue.DefaultAnyValue; import java.io.*; import java.lang.annotation.*; import java.lang.reflect.*; @@ -17,6 +14,9 @@ import java.util.concurrent.*; import java.util.jar.*; import java.util.logging.*; import java.util.regex.*; +import org.redkale.util.AnyValue; +import org.redkale.util.AnyValue.DefaultAnyValue; +import org.redkale.util.AutoLoad; /** * class过滤器, 符合条件的class会保留下来存入FilterEntry。 @@ -82,7 +82,7 @@ public final class ClassFilter { /** * 自动扫描地过滤指定的class * - * @param property AnyValue + * @param property AnyValue * @param clazzname String */ @SuppressWarnings("unchecked") @@ -93,9 +93,9 @@ public final class ClassFilter { /** * 过滤指定的class * - * @param property application.xml中对应class节点下的property属性项 + * @param property application.xml中对应class节点下的property属性项 * @param clazzname class名称 - * @param autoscan 为true表示自动扫描的, false表示显著调用filter, AutoLoad的注解将被忽略 + * @param autoscan 为true表示自动扫描的, false表示显著调用filter, AutoLoad的注解将被忽略 */ public final void filter(AnyValue property, String clazzname, boolean autoscan) { boolean r = accept0(property, clazzname); @@ -152,7 +152,7 @@ public final class ClassFilter { /** * 判断class是否有效 * - * @param property AnyValue + * @param property AnyValue * @param classname String * @return boolean */ @@ -191,7 +191,7 @@ public final class ClassFilter { * 判断class是否有效 * * @param property AnyValue - * @param clazz Class + * @param clazz Class * @param autoscan boolean * @return boolean */ @@ -283,7 +283,7 @@ public final class ClassFilter { @Override public String toString() { return this.getClass().getSimpleName() + "[thread=" + Thread.currentThread().getName() - + ", type=" + this.type.getSimpleName() + ", name=" + name + ", groups=" + groups + "]"; + + ", type=" + this.type.getSimpleName() + ", name=" + name + ", groups=" + groups + "]"; } @Override @@ -310,6 +310,10 @@ public final class ClassFilter { return property; } + public boolean isEmptyGroups() { + return groups == null || groups.isEmpty(); + } + public HashSet getGroups() { return groups; } diff --git a/src/main/java/org/redkale/boot/NodeServer.java b/src/main/java/org/redkale/boot/NodeServer.java index 28c913f09..552a9b091 100644 --- a/src/main/java/org/redkale/boot/NodeServer.java +++ b/src/main/java/org/redkale/boot/NodeServer.java @@ -5,14 +5,6 @@ */ package org.redkale.boot; -import static org.redkale.boot.Application.*; -import org.redkale.boot.ClassFilter.FilterEntry; -import org.redkale.net.sncp.ServiceWrapper; -import org.redkale.net.Server; -import org.redkale.net.sncp.Sncp; -import org.redkale.service.Service; -import org.redkale.util.AnyValue; -import org.redkale.util.AnyValue.DefaultAnyValue; import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -25,11 +17,14 @@ import java.util.logging.*; import java.util.stream.*; import javax.annotation.*; import javax.persistence.*; +import static org.redkale.boot.Application.*; +import org.redkale.boot.ClassFilter.FilterEntry; import org.redkale.net.*; import org.redkale.net.sncp.*; import org.redkale.service.*; import org.redkale.source.*; import org.redkale.util.*; +import org.redkale.util.AnyValue.DefaultAnyValue; /** * @@ -276,7 +271,7 @@ public abstract class NodeServer { final HashSet groups = entry.getGroups(); //groups.isEmpty()表示没有配置groups属性。 if (groups.isEmpty() && isSNCP() && this.sncpGroup != null) groups.add(this.sncpGroup); - final boolean localed = (this.sncpAddress == null && !type.isInterface() && !Modifier.isAbstract(type.getModifiers())) //非SNCP的Server,通常是单点服务 + final boolean localed = (this.sncpAddress == null && entry.isEmptyGroups() && !type.isInterface() && !Modifier.isAbstract(type.getModifiers())) //非SNCP的Server,通常是单点服务 || groups.contains(this.sncpGroup) //本地IP含在内的 || type.getAnnotation(LocalService.class) != null;//本地模式 if (localed && (type.isInterface() || Modifier.isAbstract(type.getModifiers()))) continue; //本地模式不能实例化接口和抽象类的Service类