From 17b720d39023a101f25509671ce8a318dcbd13b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9C=B0=E5=B9=B3=E7=BA=BF?= <22250530@qq.com> Date: Mon, 10 Aug 2015 15:05:49 +0800 Subject: [PATCH] --- src/com/wentch/redkale/boot/ClassFilter.java | 12 ++++++++++++ src/com/wentch/redkale/boot/NodeHttpServer.java | 2 +- src/com/wentch/redkale/boot/NodeServer.java | 13 ++++++++++--- src/com/wentch/redkale/boot/NodeSncpServer.java | 2 +- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/com/wentch/redkale/boot/ClassFilter.java b/src/com/wentch/redkale/boot/ClassFilter.java index 9cad97054..7129e08d1 100644 --- a/src/com/wentch/redkale/boot/ClassFilter.java +++ b/src/com/wentch/redkale/boot/ClassFilter.java @@ -41,9 +41,16 @@ public final class ClassFilter { private List ands; + private AnyValue conf; + public ClassFilter(Class annotationClass, Class superClass) { + this(annotationClass, superClass, null); + } + + public ClassFilter(Class annotationClass, Class superClass, AnyValue conf) { this.annotationClass = annotationClass; this.superClass = superClass; + this.conf = conf; } public ClassFilter or(ClassFilter filter) { @@ -90,6 +97,11 @@ public final class ClassFilter { try { Class clazz = Class.forName(clazzname); if (accept(property, clazz, autoscan)) { + if (conf != null) { + if (property == null) { + property = conf; + } + } entrys.add(new FilterEntry(clazz, property)); } } catch (Throwable cfe) { diff --git a/src/com/wentch/redkale/boot/NodeHttpServer.java b/src/com/wentch/redkale/boot/NodeHttpServer.java index 8fe6befd5..c5a84b898 100644 --- a/src/com/wentch/redkale/boot/NodeHttpServer.java +++ b/src/com/wentch/redkale/boot/NodeHttpServer.java @@ -53,7 +53,7 @@ public final class NodeHttpServer extends NodeServer { ClassFilter.Loader.load(home, serviceFilter, httpFilter); long e = System.currentTimeMillis() - s; logger.info(this.getClass().getSimpleName() + " load filter class in " + e + " ms"); - loadService(config.getAnyValue("services"), serviceFilter); //必须在servlet之前 + loadService(serviceFilter); //必须在servlet之前 initWebSocketService(); if (server != null) loadHttpServlet(config.getAnyValue("servlets"), httpFilter); } diff --git a/src/com/wentch/redkale/boot/NodeServer.java b/src/com/wentch/redkale/boot/NodeServer.java index e64053441..5d536ad13 100644 --- a/src/com/wentch/redkale/boot/NodeServer.java +++ b/src/com/wentch/redkale/boot/NodeServer.java @@ -15,6 +15,7 @@ import com.wentch.redkale.boot.ClassFilter.FilterEntry; import com.wentch.redkale.net.*; import com.wentch.redkale.source.*; import com.wentch.redkale.util.*; +import com.wentch.redkale.util.AnyValue.DefaultAnyValue; import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.*; @@ -186,7 +187,7 @@ public abstract class NodeServer { } @SuppressWarnings("unchecked") - protected void loadService(final AnyValue servicesConf, ClassFilter serviceFilter) throws Exception { + protected void loadService(ClassFilter serviceFilter) throws Exception { if (serviceFilter == null) return; final String threadName = "[" + Thread.currentThread().getName() + "] "; final Set> entrys = serviceFilter.getFilterEntrys(); @@ -287,14 +288,20 @@ public abstract class NodeServer { protected static ClassFilter createClassFilter(final String localGroup, final AnyValue config, Class ref, Class inter, Class ref2, String properties, String property) { - ClassFilter cf = new ClassFilter(ref, inter); + ClassFilter cf = new ClassFilter(ref, inter, null); if (properties == null && properties == null) return cf; if (config == null) return cf; AnyValue[] proplist = config.getAnyValues(properties); if (proplist == null || proplist.length < 1) return cf; cf = null; for (AnyValue list : proplist) { - ClassFilter filter = new ClassFilter(ref, inter); + DefaultAnyValue prop = null; + String sc = list.getValue("group", ""); + if (!sc.isEmpty()) { + prop = new AnyValue.DefaultAnyValue(); + prop.addValue("group", sc); + } + ClassFilter filter = new ClassFilter(ref, inter, prop); for (AnyValue av : list.getAnyValues(property)) { filter.filter(av, av.getValue("value"), false); } diff --git a/src/com/wentch/redkale/boot/NodeSncpServer.java b/src/com/wentch/redkale/boot/NodeSncpServer.java index bfb5cbf6d..dfca4a595 100644 --- a/src/com/wentch/redkale/boot/NodeSncpServer.java +++ b/src/com/wentch/redkale/boot/NodeSncpServer.java @@ -47,7 +47,7 @@ public final class NodeSncpServer extends NodeServer { ClassFilter.Loader.load(home, serviceFilter); long e = System.currentTimeMillis() - s; logger.info(this.getClass().getSimpleName() + " load filter class in " + e + " ms"); - loadService(config.getAnyValue("services"), serviceFilter); //必须在servlet之前 + loadService(serviceFilter); //必须在servlet之前 //------------------------------------------------------------------- if (server == null) return; //调试时server才可能为null final StringBuilder sb = logger.isLoggable(Level.FINE) ? new StringBuilder() : null;