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 44a1b1c8..84928f69 100644 --- a/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java +++ b/orm/src/main/java/com/zfoo/orm/manager/OrmManager.java @@ -40,6 +40,7 @@ import org.bson.codecs.configuration.CodecRegistries; import org.bson.codecs.configuration.CodecRegistry; import org.bson.codecs.pojo.PojoCodecProvider; import org.bson.types.ObjectId; +import org.springframework.aop.framework.AopProxyUtils; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.type.AnnotationMetadata; @@ -191,7 +192,9 @@ public class OrmManager implements IOrmManager { var applicationContext = OrmContext.getApplicationContext(); var componentBeans = applicationContext.getBeansWithAnnotation(Component.class); for (var bean : componentBeans.values()) { - ReflectionUtils.filterFieldsInClass(bean.getClass() + //防止被CGLIB代理时 直接赋值无效 + var targetBean = Objects.requireNonNullElse(AopProxyUtils.getSingletonTarget(bean), bean); + ReflectionUtils.filterFieldsInClass(targetBean.getClass() , field -> field.isAnnotationPresent(EntityCacheAutowired.class) , field -> { Type type = field.getGenericType(); @@ -212,7 +215,7 @@ public class OrmManager implements IOrmManager { } ReflectionUtils.makeAccessible(field); - ReflectionUtils.setField(field, bean, entityCaches); + ReflectionUtils.setField(field, targetBean, entityCaches); allEntityCachesUsableMap.put(entityClazz, true); }); } diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java index 6e747c64..27f14564 100644 --- a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java +++ b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java @@ -29,6 +29,7 @@ import com.zfoo.storage.model.StorageDefinition; import com.zfoo.storage.util.function.Func1; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.aop.framework.AopProxyUtils; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; @@ -148,12 +149,16 @@ public class StorageManager implements IStorageManager { var applicationContext = StorageContext.getApplicationContext(); var componentBeans = applicationContext.getBeansWithAnnotation(Component.class); for (var bean : componentBeans.values()) { - var clazz = bean.getClass(); + + //防止被CGLIB代理时 直接赋值无效 + var targetBean = Objects.requireNonNullElse(AopProxyUtils.getSingletonTarget(bean), bean); + + var clazz = targetBean.getClass(); ReflectionUtils.filterFieldsInClass(clazz, field -> field.isAnnotationPresent(StorageAutowired.class), field -> { Type type = field.getGenericType(); if (!(type instanceof ParameterizedType)) { - throw new RuntimeException(StringUtils.format("[bean:{}] type declaration is incorrect, not a generic class", bean.getClass().getSimpleName())); + throw new RuntimeException(StringUtils.format("[bean:{}] type declaration is incorrect, not a generic class", targetBean.getClass().getSimpleName())); } Type[] types = ((ParameterizedType) type).getActualTypeArguments(); @@ -181,7 +186,7 @@ public class StorageManager implements IStorageManager { } ReflectionUtils.makeAccessible(field); - ReflectionUtils.setField(field, bean, storage); + ReflectionUtils.setField(field, targetBean, storage); storage.setRecycle(false); }); }