From 83b803db51b45c91a7d5cd28558fdb6d7f1504e5 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Fri, 25 Jun 2021 21:58:38 +0800 Subject: [PATCH] =?UTF-8?q?perf[event]:=20=E8=B0=83=E6=95=B4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=BB=93=E6=9E=84=EF=BC=8C=E7=AE=80=E5=8C=96EventBus?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zfoo/event/manager/EventBus.java | 58 ++----------------- .../event/schema/EventRegisterProcessor.java | 50 +++++++++++++++- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/event/src/main/java/com/zfoo/event/manager/EventBus.java b/event/src/main/java/com/zfoo/event/manager/EventBus.java index cb463143..78becf67 100644 --- a/event/src/main/java/com/zfoo/event/manager/EventBus.java +++ b/event/src/main/java/com/zfoo/event/manager/EventBus.java @@ -13,23 +13,14 @@ package com.zfoo.event.manager; -import com.zfoo.event.model.anno.EventReceiver; import com.zfoo.event.model.event.IEvent; -import com.zfoo.event.model.vo.EnhanceUtils; -import com.zfoo.event.model.vo.EventReceiverDefinition; import com.zfoo.event.model.vo.IEventReceiver; import com.zfoo.protocol.collection.CollectionUtils; -import com.zfoo.protocol.util.ReflectionUtils; -import com.zfoo.protocol.util.StringUtils; import com.zfoo.util.math.RandomUtils; import io.netty.util.concurrent.FastThreadLocalThread; -import javassist.CannotCompileException; -import javassist.NotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -128,8 +119,8 @@ public abstract class EventBus { return executors[RandomUtils.randomInt(EXECUTORS_SIZE)]; } - private static void doSubmit(IEvent event, List listReceiver) { - for (var receiver : listReceiver) { + private static void doSubmit(IEvent event, List receiverList) { + for (var receiver : receiverList) { try { receiver.invoke(event); } catch (Exception e) { @@ -140,49 +131,10 @@ public abstract class EventBus { } } - public static void registerEventReceiver(Object bean) { - try { - var clazz = bean.getClass(); - var methods = ReflectionUtils.getMethodsByAnnoInPOJOClass(clazz, EventReceiver.class); - for (var method : methods) { - var paramClazzs = method.getParameterTypes(); - if (paramClazzs.length != 1) { - throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] must have one parameter!", bean.getClass().getName(), method.getName())); - } - if (!IEvent.class.isAssignableFrom(paramClazzs[0])) { - throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] must have one [IEvent] type parameter!", bean.getClass().getName(), method.getName())); - } - - var eventClazz = (Class) paramClazzs[0]; - var eventName = eventClazz.getCanonicalName(); - var methodName = method.getName(); - - if (!Modifier.isPublic(method.getModifiers())) { - throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] [event:{}] must use 'public' as modifier!", bean.getClass().getName(), methodName, eventName)); - } - - if (Modifier.isStatic(method.getModifiers())) { - throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] [event:{}] can not use 'static' as modifier!", bean.getClass().getName(), methodName, eventName)); - } - - var expectedMethodName = StringUtils.format("on{}", eventClazz.getSimpleName()); - if (!methodName.equals(expectedMethodName)) { - throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] [event:{}] expects '{}' as method name!" - , bean.getClass().getName(), methodName, eventName, expectedMethodName)); - } - - var receiverDefinition = new EventReceiverDefinition(bean, method, eventClazz); - if (!receiverMap.containsKey(eventClazz)) { - receiverMap.put(eventClazz, new LinkedList<>()); - } - - var enhanceReceiverDefinition = EnhanceUtils.createEventReceiver(receiverDefinition); - receiverMap.get(eventClazz).add(enhanceReceiverDefinition); - } - } catch (NotFoundException | CannotCompileException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) { - throw new RuntimeException(e); - } + public static void registerEventReceiver(Class eventType, IEventReceiver receiver) { + receiverMap.computeIfAbsent(eventType, it -> new LinkedList<>()).add(receiver); } + } diff --git a/event/src/main/java/com/zfoo/event/schema/EventRegisterProcessor.java b/event/src/main/java/com/zfoo/event/schema/EventRegisterProcessor.java index 15e84fa6..a0ea75e1 100644 --- a/event/src/main/java/com/zfoo/event/schema/EventRegisterProcessor.java +++ b/event/src/main/java/com/zfoo/event/schema/EventRegisterProcessor.java @@ -14,9 +14,20 @@ package com.zfoo.event.schema; import com.zfoo.event.manager.EventBus; +import com.zfoo.event.model.anno.EventReceiver; +import com.zfoo.event.model.event.IEvent; +import com.zfoo.event.model.vo.EnhanceUtils; +import com.zfoo.event.model.vo.EventReceiverDefinition; +import com.zfoo.protocol.util.ReflectionUtils; +import com.zfoo.protocol.util.StringUtils; +import javassist.CannotCompileException; +import javassist.NotFoundException; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Modifier; + /** * @author jaysunxiao * @version 3.0 @@ -25,7 +36,44 @@ public class EventRegisterProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - EventBus.registerEventReceiver(bean); + try { + var clazz = bean.getClass(); + var methods = ReflectionUtils.getMethodsByAnnoInPOJOClass(clazz, EventReceiver.class); + for (var method : methods) { + var paramClazzs = method.getParameterTypes(); + if (paramClazzs.length != 1) { + throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] must have one parameter!", bean.getClass().getName(), method.getName())); + } + if (!IEvent.class.isAssignableFrom(paramClazzs[0])) { + throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] must have one [IEvent] type parameter!", bean.getClass().getName(), method.getName())); + } + + var eventClazz = (Class) paramClazzs[0]; + var eventName = eventClazz.getCanonicalName(); + var methodName = method.getName(); + + if (!Modifier.isPublic(method.getModifiers())) { + throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] [event:{}] must use 'public' as modifier!", bean.getClass().getName(), methodName, eventName)); + } + + if (Modifier.isStatic(method.getModifiers())) { + throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] [event:{}] can not use 'static' as modifier!", bean.getClass().getName(), methodName, eventName)); + } + + var expectedMethodName = StringUtils.format("on{}", eventClazz.getSimpleName()); + if (!methodName.equals(expectedMethodName)) { + throw new IllegalArgumentException(StringUtils.format("[class:{}] [method:{}] [event:{}] expects '{}' as method name!" + , bean.getClass().getName(), methodName, eventName, expectedMethodName)); + } + + var receiverDefinition = new EventReceiverDefinition(bean, method, eventClazz); + var enhanceReceiverDefinition = EnhanceUtils.createEventReceiver(receiverDefinition); + EventBus.registerEventReceiver(eventClazz, enhanceReceiverDefinition); + } + } catch (NotFoundException | CannotCompileException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) { + throw new RuntimeException(e); + } + return bean; }