diff --git a/event/src/main/java/com/zfoo/event/EventExceptionContext.java b/event/src/main/java/com/zfoo/event/EventExceptionContext.java deleted file mode 100644 index ff1fc0a5..00000000 --- a/event/src/main/java/com/zfoo/event/EventExceptionContext.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.zfoo.event; - -import java.lang.reflect.Method; - -/** - * 订阅者抛出异常上下文 - * - * @param event 事件对象 - * @param subscriber 订阅者 - * @param subscriberMethod 订阅方法 - */ -public record EventExceptionContext(Object event, Object subscriber, Method subscriberMethod) { -} diff --git a/event/src/main/java/com/zfoo/event/EventExceptionHandler.java b/event/src/main/java/com/zfoo/event/EventExceptionHandler.java deleted file mode 100644 index c0786bf7..00000000 --- a/event/src/main/java/com/zfoo/event/EventExceptionHandler.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.zfoo.event; - -import com.zfoo.event.manager.EventBus; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.lang.reflect.Method; - -/** - * 处理事件订阅者抛出异常 - * - * @author veione - */ -@FunctionalInterface -public interface EventExceptionHandler { - /** - * 处理订阅者抛出的异常 - * - * @param exception 异常对象 - * @param context 异常上下文 - */ - void handleException(Throwable exception, EventExceptionContext context); - - final class LoggingEventExceptionHandler implements EventExceptionHandler { - public static final LoggingEventExceptionHandler INSTANCE = new LoggingEventExceptionHandler(); - private final Logger logger = LoggerFactory.getLogger(EventBus.class.getName()); - - @Override - public void handleException(Throwable exception, EventExceptionContext context) { - if (logger.isErrorEnabled()) { - logger.error(message(context), exception); - } - } - - private static String message(EventExceptionContext context) { - Method method = context.subscriberMethod(); - return "Exception thrown by subscriber method " - + method.getName() - + '(' - + method.getParameterTypes()[0].getName() - + ')' - + " on subscriber " - + context.subscriber() - + " when dispatching event: " - + context.event(); - } - } -} diff --git a/event/src/main/java/com/zfoo/event/anno/EventService.java b/event/src/main/java/com/zfoo/event/anno/EventService.java deleted file mode 100644 index 142309d1..00000000 --- a/event/src/main/java/com/zfoo/event/anno/EventService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.zfoo.event.anno; - -import org.springframework.aot.hint.annotation.Reflective; -import org.springframework.stereotype.Service; - -import java.lang.annotation.*; - -/** - * 用于标记处理事件接口 - * - * @author veione - */ -@Documented -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@Reflective -@Service -public @interface EventService { -} diff --git a/event/src/main/java/com/zfoo/event/enhance/EnhanceUtils.java b/event/src/main/java/com/zfoo/event/enhance/EnhanceUtils.java index b31c61c2..c37345b2 100644 --- a/event/src/main/java/com/zfoo/event/enhance/EnhanceUtils.java +++ b/event/src/main/java/com/zfoo/event/enhance/EnhanceUtils.java @@ -63,17 +63,11 @@ public abstract class EnhanceUtils { field.setModifiers(Modifier.PRIVATE + Modifier.FINAL); enhanceClazz.addField(field); - // 定义类中的一个成员method - CtClass methodClass = classPool.get(method.getClass().getName()); - CtField methodField = new CtField(methodClass, "method", enhanceClazz); - methodField.setModifiers(Modifier.PRIVATE + Modifier.FINAL); - enhanceClazz.addField(methodField); - // 定义类的构造器 // 创建构造函数参数数组 - CtClass[] parameterTypes = {beanClass, methodClass}; + CtClass[] parameterTypes = {beanClass}; CtConstructor constructor = new CtConstructor(parameterTypes, enhanceClazz); - constructor.setBody("{this.bean=$1; this.method=$2;}"); + constructor.setBody("{this.bean=$1;}"); constructor.setModifiers(Modifier.PUBLIC); enhanceClazz.addConstructor(constructor); @@ -98,18 +92,11 @@ public abstract class EnhanceUtils { beanMethod.setBody(beanMethodBody); enhanceClazz.addMethod(beanMethod); - // 定义类实现的接口方法getMethod - CtMethod getMethod = new CtMethod(classPool.get(Method.class.getName()), "getMethod", null, enhanceClazz); - getMethod.setModifiers(Modifier.PUBLIC + Modifier.FINAL); - String getMethodBody = "{ return this.method; }"; - getMethod.setBody(getMethodBody); - enhanceClazz.addMethod(getMethod); - // 释放缓存 enhanceClazz.detach(); Class resultClazz = enhanceClazz.toClass(IEventReceiver.class); - Constructor resultConstructor = resultClazz.getConstructor(bean.getClass(), method.getClass()); - return (IEventReceiver) resultConstructor.newInstance(bean, method); + Constructor resultConstructor = resultClazz.getConstructor(bean.getClass()); + return (IEventReceiver) resultConstructor.newInstance(bean); } } diff --git a/event/src/main/java/com/zfoo/event/enhance/IEventReceiver.java b/event/src/main/java/com/zfoo/event/enhance/IEventReceiver.java index a53610d0..999097ec 100644 --- a/event/src/main/java/com/zfoo/event/enhance/IEventReceiver.java +++ b/event/src/main/java/com/zfoo/event/enhance/IEventReceiver.java @@ -26,6 +26,4 @@ public interface IEventReceiver { void invoke(IEvent event); Object getBean(); - - Method getMethod(); } 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 4071219a..a96ad4b1 100644 --- a/event/src/main/java/com/zfoo/event/manager/EventBus.java +++ b/event/src/main/java/com/zfoo/event/manager/EventBus.java @@ -12,8 +12,6 @@ */ package com.zfoo.event.manager; -import com.zfoo.event.EventExceptionContext; -import com.zfoo.event.EventExceptionHandler; import com.zfoo.event.enhance.IEventReceiver; import com.zfoo.event.model.IEvent; import com.zfoo.protocol.collection.CollectionUtils; @@ -35,6 +33,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.BiConsumer; +import java.util.function.Consumer; /** * @author godotg @@ -59,7 +59,8 @@ public abstract class EventBus { /** * event exception handler */ - private static EventExceptionHandler exceptionHandler = EventExceptionHandler.LoggingEventExceptionHandler.INSTANCE; + public static BiConsumer exceptionHandler = null; + public static Consumer noEventReceiverHandler = null; static { for (int i = 0; i < executors.length; i++) { @@ -93,15 +94,6 @@ public abstract class EventBus { } } - /** - * 设置异常处理器 - * - * @param handler 异常处理器 - */ - public static void setExceptionHandler(EventExceptionHandler handler) { - exceptionHandler = handler; - } - /** * Publish the event * @@ -114,7 +106,9 @@ public abstract class EventBus { var clazz = event.getClass(); var receivers = receiverMap.get(clazz); if (CollectionUtils.isEmpty(receivers)) { - logger.warn("This event [" + clazz.getName() + "] has not registered any valid event handler"); + if (noEventReceiverHandler != null) { + noEventReceiverHandler.accept(event); + } return; } for (var receiver : receivers) { @@ -130,7 +124,10 @@ public abstract class EventBus { try { receiver.invoke(event); } catch (Throwable t) { - exceptionHandler.handleException(t.getCause(), new EventExceptionContext(event, receiver.getBean(), receiver.getMethod())); + logger.error("eventBus {} [{}] unknown error", receiver.bus(), event.getClass().getSimpleName(), t); + if (exceptionHandler != null) { + exceptionHandler.accept(receiver, event); + } } } diff --git a/event/src/test/java/com/zfoo/event/ApplicationTest.java b/event/src/test/java/com/zfoo/event/ApplicationTest.java index 2f81f478..1207fa26 100644 --- a/event/src/test/java/com/zfoo/event/ApplicationTest.java +++ b/event/src/test/java/com/zfoo/event/ApplicationTest.java @@ -32,8 +32,6 @@ public class ApplicationTest { // see receiver method of MyController1 and MyController2 EventBus.post(MyNoticeEvent.valueOf("我的事件")); - EventBus.post(new UnhandledEvent()); - ThreadUtils.sleep(1000); } diff --git a/event/src/test/java/com/zfoo/event/MyController1.java b/event/src/test/java/com/zfoo/event/MyController1.java index 6b9137bc..03117df6 100644 --- a/event/src/test/java/com/zfoo/event/MyController1.java +++ b/event/src/test/java/com/zfoo/event/MyController1.java @@ -14,14 +14,14 @@ package com.zfoo.event; import com.zfoo.event.anno.EventReceiver; -import com.zfoo.event.anno.EventService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; /** * @author godotg */ -@EventService +@Component public class MyController1 { private static final Logger logger = LoggerFactory.getLogger(MyController1.class); @@ -30,7 +30,6 @@ public class MyController1 { @EventReceiver public void onMyNoticeEvent(MyNoticeEvent event) { logger.info("方法1同步执行事件:" + event.getMessage()); - throw new NullPointerException(); } } diff --git a/event/src/test/java/com/zfoo/event/MyController2.java b/event/src/test/java/com/zfoo/event/MyController2.java index 0ddf3afa..88af6276 100644 --- a/event/src/test/java/com/zfoo/event/MyController2.java +++ b/event/src/test/java/com/zfoo/event/MyController2.java @@ -15,14 +15,14 @@ package com.zfoo.event; import com.zfoo.event.anno.Bus; import com.zfoo.event.anno.EventReceiver; -import com.zfoo.event.anno.EventService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; /** * @author godotg */ -@EventService +@Component public class MyController2 { private static final Logger logger = LoggerFactory.getLogger(MyController2.class); diff --git a/event/src/test/java/com/zfoo/event/MyController3.java b/event/src/test/java/com/zfoo/event/MyController3.java index 65b458b8..4390075d 100644 --- a/event/src/test/java/com/zfoo/event/MyController3.java +++ b/event/src/test/java/com/zfoo/event/MyController3.java @@ -15,14 +15,14 @@ package com.zfoo.event; import com.zfoo.event.anno.Bus; import com.zfoo.event.anno.EventReceiver; -import com.zfoo.event.anno.EventService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; /** * @author godotg */ -@EventService +@Component public class MyController3 { private static final Logger logger = LoggerFactory.getLogger(MyController3.class); diff --git a/event/src/test/java/com/zfoo/event/UnhandledEvent.java b/event/src/test/java/com/zfoo/event/UnhandledEvent.java deleted file mode 100644 index e8ed5e38..00000000 --- a/event/src/test/java/com/zfoo/event/UnhandledEvent.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.zfoo.event; - -import com.zfoo.event.model.IEvent; - -public class UnhandledEvent implements IEvent { -}