From 849fe15728df525446b4918cc260fc88dafc5767 Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Fri, 18 Sep 2020 21:00:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4RestDyncListener?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/META-INF/application-template.xml | 2 +- src/org/redkale/boot/Application.java | 13 +---- src/org/redkale/boot/ApplicationListener.java | 8 +++ src/org/redkale/boot/NodeHttpServer.java | 2 +- src/org/redkale/net/http/HttpServer.java | 11 ++-- src/org/redkale/net/http/Rest.java | 8 +-- .../redkale/net/http/RestDyncListener.java | 54 ------------------- .../test/rest/_DynHelloRestServlet1.java | 4 +- .../redkale/test/service/ABMainService.java | 4 +- 9 files changed, 21 insertions(+), 85 deletions(-) delete mode 100644 src/org/redkale/net/http/RestDyncListener.java diff --git a/src/META-INF/application-template.xml b/src/META-INF/application-template.xml index 00a875d7e..14e9efb9e 100644 --- a/src/META-INF/application-template.xml +++ b/src/META-INF/application-template.xml @@ -116,7 +116,7 @@ diff --git a/src/org/redkale/boot/Application.java b/src/org/redkale/boot/Application.java index 1a8781e73..7892556cc 100644 --- a/src/org/redkale/boot/Application.java +++ b/src/org/redkale/boot/Application.java @@ -175,8 +175,6 @@ public final class Application { //监听事件 private final List listeners = new CopyOnWriteArrayList<>(); - final List restListeners = new CopyOnWriteArrayList<>(); - //服务启动时间 private final long startTime = System.currentTimeMillis(); @@ -735,13 +733,6 @@ public final class Application { final String listenClass = conf.getValue("value", ""); if (listenClass.isEmpty()) continue; Class clazz = classLoader.loadClass(listenClass); - if (RestDyncListener.class.isAssignableFrom(clazz)) { - RestDyncListener listener = (RestDyncListener) clazz.getDeclaredConstructor().newInstance(); - resourceFactory.inject(listener); - listener.init(this, config); - this.restListeners.add(listener); - continue; - } if (!ApplicationListener.class.isAssignableFrom(clazz)) continue; @SuppressWarnings("unchecked") ApplicationListener listener = (ApplicationListener) clazz.getDeclaredConstructor().newInstance(); @@ -919,8 +910,8 @@ public final class Application { //if (!singletonrun) signalHandle(); //if (!singletonrun) clearPersistData(); logger.info(this.getClass().getSimpleName() + " started in " + (System.currentTimeMillis() - startTime) + " ms\r\n"); - for (RestDyncListener listener : this.restListeners) { - listener.postApplicationStarted(this); + for (ApplicationListener listener : this.listeners) { + listener.postStart(this); } if (!singletonrun) this.serversLatch.await(); } diff --git a/src/org/redkale/boot/ApplicationListener.java b/src/org/redkale/boot/ApplicationListener.java index 8815a2281..eff8ec5bc 100644 --- a/src/org/redkale/boot/ApplicationListener.java +++ b/src/org/redkale/boot/ApplicationListener.java @@ -35,6 +35,14 @@ public interface ApplicationListener { default void preStart(Application application) { } + /** + * Application 在运行start后调用 + * + * @param application Application + */ + default void postStart(Application application) { + } + /** * Application 在运行shutdown前调用 * diff --git a/src/org/redkale/boot/NodeHttpServer.java b/src/org/redkale/boot/NodeHttpServer.java index b14e89cee..39159545b 100644 --- a/src/org/redkale/boot/NodeHttpServer.java +++ b/src/org/redkale/boot/NodeHttpServer.java @@ -284,7 +284,7 @@ public class NodeHttpServer extends NodeServer { } restedObjects.add(service); //避免重复创建Rest对象 } - HttpServlet servlet = httpServer.addRestServlet(serverClassLoader, service, userType, baseServletType, prefix, application.restListeners); + HttpServlet servlet = httpServer.addRestServlet(serverClassLoader, service, userType, baseServletType, prefix); if (servlet == null) return; //没有HttpMapping方法的HttpServlet调用Rest.createRestServlet就会返回null String prefix2 = prefix; WebServlet ws = servlet.getClass().getAnnotation(WebServlet.class); diff --git a/src/org/redkale/net/http/HttpServer.java b/src/org/redkale/net/http/HttpServer.java index 36451707c..043a64998 100644 --- a/src/org/redkale/net/http/HttpServer.java +++ b/src/org/redkale/net/http/HttpServer.java @@ -238,12 +238,11 @@ public class HttpServer extends Server T addRestServlet(final ClassLoader classLoader, final S service, final Class userType, final Class baseServletType, final String prefix, final List listeners) { - return addRestServlet(classLoader, null, service, userType, baseServletType, prefix, listeners); + public T addRestServlet(final ClassLoader classLoader, final S service, final Class userType, final Class baseServletType, final String prefix) { + return addRestServlet(classLoader, null, service, userType, baseServletType, prefix); } /** @@ -257,13 +256,11 @@ public class HttpServer extends Server T addRestServlet(final ClassLoader classLoader, final String name, final S service, - final Class userType, final Class baseServletType, final String prefix, final List listeners) { + public T addRestServlet(final ClassLoader classLoader, final String name, final S service, final Class userType, final Class baseServletType, final String prefix) { T servlet = null; final boolean sncp = Sncp.isSncpDyn(service); final String resname = name == null ? (sncp ? Sncp.getResourceName(service) : "") : name; @@ -284,7 +281,7 @@ public class HttpServer extends Server T createRestServlet(final ClassLoader classLoader, final Class userType0, final Class baseServletType, - final Class serviceType, final List listeners) { + public static T createRestServlet(final ClassLoader classLoader, final Class userType0, final Class baseServletType, final Class serviceType) { if (baseServletType == null || serviceType == null) throw new RuntimeException(" Servlet or Service is null Class on createRestServlet"); if (!HttpServlet.class.isAssignableFrom(baseServletType)) throw new RuntimeException(baseServletType + " is not HttpServlet Class on createRestServlet"); int mod = baseServletType.getModifiers(); @@ -1950,11 +1949,6 @@ public final class Rest { cw2.visitEnd(); newLoader.addClass((newDynName + "$" + entry.newActionClassName).replace('/', '.'), cw2.toByteArray()); } - if (listeners != null && !listeners.isEmpty()) { - for (RestDyncListener listener : listeners) { - listener.invoke(classLoader, userType, serviceType, method, entry.mappingurl); - } - } } // end for each // HashMap _createRestInnerActionEntry() { diff --git a/src/org/redkale/net/http/RestDyncListener.java b/src/org/redkale/net/http/RestDyncListener.java deleted file mode 100644 index 0a7cb50ef..000000000 --- a/src/org/redkale/net/http/RestDyncListener.java +++ /dev/null @@ -1,54 +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.http; - -import java.lang.reflect.Method; -import org.redkale.boot.Application; -import org.redkale.service.Service; -import org.redkale.util.AnyValue; - -/** - * Application进程启动后动态创建RestServlet时调用
- * 只能通过application.xml配置 - * - *

- * 详情见: https://redkale.org - * - * @author zhangjx - * @since 2.2.0 - */ -public interface RestDyncListener { - - /** - * 初始化方法 - * - * @param application Application - * @param config 配置参数 - */ - default void init(Application application, AnyValue config) { - - } - - /** - * Application 初始化完所有Server后调用 - * - * @param application Application - */ - default void postApplicationStarted(Application application) { - } - - /** - * 动态生成RestMapping方法后调用 - * - * @param classLoader ClassLoader - * @param baseServletType Rest的Servlet基类 - * @param serviceType Service类 - * @param method Service的RestMapping方法 - * @param mappingurl HttpMapping对应的url - */ - public void invoke(final ClassLoader classLoader, final Class baseServletType, - final Class serviceType, final Method method, final String mappingurl); -} diff --git a/test/org/redkale/test/rest/_DynHelloRestServlet1.java b/test/org/redkale/test/rest/_DynHelloRestServlet1.java index 8cef2f985..cac559e70 100644 --- a/test/org/redkale/test/rest/_DynHelloRestServlet1.java +++ b/test/org/redkale/test/rest/_DynHelloRestServlet1.java @@ -23,8 +23,8 @@ public class _DynHelloRestServlet1 extends SimpleRestServlet { HelloService service = new HelloService(); HttpServer server = new HttpServer(); - System.out.println(server.addRestServlet(null, service, null, SimpleRestServlet.class, "/pipes", null)); - System.out.println(server.addRestServlet(null, new HelloService(3), null, SimpleRestServlet.class, "/pipes", null)); + System.out.println(server.addRestServlet(null, service, null, SimpleRestServlet.class, "/pipes")); + System.out.println(server.addRestServlet(null, new HelloService(3), null, SimpleRestServlet.class, "/pipes")); DefaultAnyValue conf = DefaultAnyValue.create("port", "" + port); server.init(conf); diff --git a/test/org/redkale/test/service/ABMainService.java b/test/org/redkale/test/service/ABMainService.java index ad4ff7606..b50ce40d1 100644 --- a/test/org/redkale/test/service/ABMainService.java +++ b/test/org/redkale/test/service/ABMainService.java @@ -73,7 +73,7 @@ public class ABMainService implements Service { HttpServer server = new HttpServer(); server.getLogger().setLevel(Level.WARNING); - server.addRestServlet(null, service, null, HttpServlet.class, "/pipes", null); + server.addRestServlet(null, service, null, HttpServlet.class, "/pipes"); resFactory.inject(cservice); resFactory.inject(bcservice); @@ -114,7 +114,7 @@ public class ABMainService implements Service { HttpServer server = new HttpServer(); server.getLogger().setLevel(Level.WARNING); - server.addRestServlet(null, service, null, HttpServlet.class, "/pipes", null); + server.addRestServlet(null, service, null, HttpServlet.class, "/pipes"); server.init(DefaultAnyValue.create("port", "" + abport)); server.start();