From 607314a442ef26097ef1fce5c4d33246498ed71a Mon Sep 17 00:00:00 2001 From: godotg Date: Tue, 17 Jan 2023 11:18:52 +0800 Subject: [PATCH] revert[proxy]: bean should be pojo class --- .../zfoo/event/schema/EventRegisterProcessor.java | 6 +++++- .../java/com/zfoo/net/packet/PacketService.java | 6 +++--- .../java/com/zfoo/net/router/route/PacketBus.java | 6 +++++- .../main/java/com/zfoo/orm/manager/OrmManager.java | 8 +++----- .../com/zfoo/protocol/util/ReflectionUtils.java | 4 ++-- .../java/com/zfoo/scheduler/SchedulerContext.java | 14 ++++++++------ .../com/zfoo/storage/manager/StorageManager.java | 8 +++----- 7 files changed, 29 insertions(+), 23 deletions(-) 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 eed24b8b..14ef5915 100644 --- a/event/src/main/java/com/zfoo/event/schema/EventRegisterProcessor.java +++ b/event/src/main/java/com/zfoo/event/schema/EventRegisterProcessor.java @@ -43,11 +43,15 @@ public class EventRegisterProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { var clazz = bean.getClass(); - var methods = ReflectionUtils.getMethodsByAnnotation(clazz, EventReceiver.class); + var methods = ReflectionUtils.getMethodsByAnnoInPOJOClass(clazz, EventReceiver.class); if (ArrayUtils.isEmpty(methods)) { return bean; } + if (!ReflectionUtils.isPojoClass(clazz)) { + logger.warn("The message registration class [{}] is not a POJO class, and the parent class will not be scanned", clazz); + } + try { for (var method : methods) { var paramClazzs = method.getParameterTypes(); diff --git a/net/src/main/java/com/zfoo/net/packet/PacketService.java b/net/src/main/java/com/zfoo/net/packet/PacketService.java index 7d9abb70..9b7399e4 100644 --- a/net/src/main/java/com/zfoo/net/packet/PacketService.java +++ b/net/src/main/java/com/zfoo/net/packet/PacketService.java @@ -28,6 +28,7 @@ import com.zfoo.protocol.xml.XmlProtocols; import io.netty.buffer.ByteBuf; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; import org.springframework.util.ResourceUtils; import java.io.IOException; @@ -124,9 +125,8 @@ public class PacketService implements IPacketService { } // 注册协议接收器 - var beanNames = applicationContext.getBeanDefinitionNames(); - for (var beanName : beanNames) { - var bean = applicationContext.getBean(beanName); + var componentBeans = applicationContext.getBeansWithAnnotation(Component.class); + for (var bean : componentBeans.values()) { PacketBus.registerPacketReceiverDefinition(bean); } } diff --git a/net/src/main/java/com/zfoo/net/router/route/PacketBus.java b/net/src/main/java/com/zfoo/net/router/route/PacketBus.java index eee142b4..8452dc91 100644 --- a/net/src/main/java/com/zfoo/net/router/route/PacketBus.java +++ b/net/src/main/java/com/zfoo/net/router/route/PacketBus.java @@ -63,11 +63,15 @@ public abstract class PacketBus { public static void registerPacketReceiverDefinition(Object bean) { var clazz = bean.getClass(); - var methods = ReflectionUtils.getMethodsByAnnotation(clazz, PacketReceiver.class); + var methods = ReflectionUtils.getMethodsByAnnoInPOJOClass(clazz, PacketReceiver.class); if (ArrayUtils.isEmpty(methods)) { return; } + if (!ReflectionUtils.isPojoClass(clazz)) { + logger.warn("The message registration class [{}] is not a POJO class, and the parent class will not be scanned", clazz); + } + for (var method : methods) { var paramClazzs = method.getParameterTypes(); diff --git a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java index 2291ec99..31f5cab4 100644 --- a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java +++ b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java @@ -50,6 +50,7 @@ import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.ClassMetadata; import org.springframework.core.type.classreading.CachingMetadataReaderFactory; import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.stereotype.Component; import java.io.IOException; import java.lang.reflect.Modifier; @@ -186,11 +187,8 @@ public class OrmManager implements IOrmManager { @Override public void inject() { var applicationContext = OrmContext.getApplicationContext(); - var beanNames = applicationContext.getBeanDefinitionNames(); - - for (var beanName : beanNames) { - var bean = applicationContext.getBean(beanName); - + var componentBeans = applicationContext.getBeansWithAnnotation(Component.class); + for (var bean : componentBeans.values()) { ReflectionUtils.filterFieldsInClass(bean.getClass() , field -> field.isAnnotationPresent(EntityCachesInjection.class) , field -> { diff --git a/protocol/src/main/java/com/zfoo/protocol/util/ReflectionUtils.java b/protocol/src/main/java/com/zfoo/protocol/util/ReflectionUtils.java index f1e0680f..009b9d25 100644 --- a/protocol/src/main/java/com/zfoo/protocol/util/ReflectionUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/util/ReflectionUtils.java @@ -164,9 +164,9 @@ public abstract class ReflectionUtils { * @param annotation 指定注解的Class * @return 数组,可能长度为0 */ - public static Method[] getMethodsByAnnotation(Class clazz, Class annotation) { + public static Method[] getMethodsByAnnoInPOJOClass(Class clazz, Class annotation) { var list = new ArrayList(); - var methods = getAllMethods(clazz); + var methods = clazz.getDeclaredMethods(); for (var method : methods) { if (method.isAnnotationPresent(annotation)) { list.add(method); diff --git a/scheduler/src/main/java/com/zfoo/scheduler/SchedulerContext.java b/scheduler/src/main/java/com/zfoo/scheduler/SchedulerContext.java index 9ed087b4..224341fe 100644 --- a/scheduler/src/main/java/com/zfoo/scheduler/SchedulerContext.java +++ b/scheduler/src/main/java/com/zfoo/scheduler/SchedulerContext.java @@ -28,6 +28,7 @@ import org.springframework.context.event.ApplicationContextEvent; import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; import java.lang.reflect.Field; import java.lang.reflect.Modifier; @@ -96,17 +97,18 @@ public class SchedulerContext implements ApplicationListener field.isAnnotationPresent(ResInjection.class), field -> { Type type = field.getGenericType();