From d2aacf7b8ca16009677d370151782157a5f17b6f Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Fri, 3 Nov 2017 16:40:13 +0800 Subject: [PATCH] =?UTF-8?q?@Resource=E6=94=AF=E6=8C=81=E5=90=AB{system.pro?= =?UTF-8?q?perty.xxx}=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/redkale/net/http/Rest.java | 15 +-------------- src/org/redkale/net/http/RestWebSocket.java | 1 + src/org/redkale/util/ResourceFactory.java | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/org/redkale/net/http/Rest.java b/src/org/redkale/net/http/Rest.java index b480a3faa..c0111ec82 100644 --- a/src/org/redkale/net/http/Rest.java +++ b/src/org/redkale/net/http/Rest.java @@ -169,19 +169,6 @@ public final class Rest { } } - static String getRestWebSocketResourceName(String name) { - if (name == null) return null; - int pos = name.indexOf("{system.property."); - if (pos < 0) return name; - String prefix = name.substring(0, pos); - String subname = name.substring(pos + "{system.property.".length()); - pos = subname.indexOf('}'); - if (pos < 0) return name; - String postfix = subname.substring(pos + 1); - String property = subname.substring(0, pos); - return getRestWebSocketResourceName(prefix + System.getProperty(property, "") + postfix); - } - static T createRestWebSocketServlet(final ClassLoader classLoader, final Class webSocketType) { if (webSocketType == null) throw new RuntimeException("Rest WebSocket Class is null on createRestWebSocketServlet"); if (Modifier.isAbstract(webSocketType.getModifiers())) throw new RuntimeException("Rest WebSocket Class(" + webSocketType + ") cannot abstract on createRestWebSocketServlet"); @@ -196,7 +183,7 @@ public final class Rest { } } if (!valid) throw new RuntimeException("Rest WebSocket Class(" + webSocketType + ") must have public or protected Constructor on createRestWebSocketServlet"); - final String rwsname = getRestWebSocketResourceName(rws.name()); + final String rwsname = ResourceFactory.formatResourceName(rws.name()); if (!checkName(rws.catalog())) throw new RuntimeException(webSocketType.getName() + " have illeal " + RestWebSocket.class.getSimpleName() + ".catalog, only 0-9 a-z A-Z _ cannot begin 0-9"); if (!checkName(rwsname)) throw new RuntimeException(webSocketType.getName() + " have illeal " + RestWebSocket.class.getSimpleName() + ".name, only 0-9 a-z A-Z _ cannot begin 0-9"); diff --git a/src/org/redkale/net/http/RestWebSocket.java b/src/org/redkale/net/http/RestWebSocket.java index b08a8f682..1f3ab7957 100644 --- a/src/org/redkale/net/http/RestWebSocket.java +++ b/src/org/redkale/net/http/RestWebSocket.java @@ -12,6 +12,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * 只能依附在WebSocket类上,name默认为Service的类名小写并去掉Service字样及后面的字符串 (如HelloWebSocket/HelloWebSocketImpl,的默认路径为 hello)。
* 注意: 被标记@RestWebSocket的WebSocket不能被修饰为abstract或final,且其内部标记为@Resource的字段只能是protected或public,且必须要有一个protected或public的空参数构造函数。
+ * name值支持含{system.property.xxx}模式 *

* 详情见: https://redkale.org * diff --git a/src/org/redkale/util/ResourceFactory.java b/src/org/redkale/util/ResourceFactory.java index 4204f7f96..1f529ad6d 100644 --- a/src/org/redkale/util/ResourceFactory.java +++ b/src/org/redkale/util/ResourceFactory.java @@ -532,6 +532,19 @@ public final class ResourceFactory { return inject(src, attachment, consumer, new ArrayList()); } + public static String formatResourceName(String name) { + if (name == null) return null; + int pos = name.indexOf("{system.property."); + if (pos < 0) return name; + String prefix = name.substring(0, pos); + String subname = name.substring(pos + "{system.property.".length()); + pos = subname.indexOf('}'); + if (pos < 0) return name; + String postfix = subname.substring(pos + 1); + String property = subname.substring(0, pos); + return formatResourceName(prefix + System.getProperty(property, "") + postfix); + } + private boolean inject(final Object src, final T attachment, final BiConsumer consumer, final List list) { if (src == null) return false; try { @@ -575,7 +588,7 @@ public final class ResourceFactory { } boolean autoregnull = true; - final String rcname = tname; + final String rcname = formatResourceName(tname); Object rs; if (rcname.startsWith("system.property.")) { rs = System.getProperty(rcname.substring("system.property.".length()));