Merge pull request #321 from SnobbyVirus1973/main

fix: ClassUtil.newInstance无法生成实例问题修复 https://github.com/mybatis-flex/mybatis-flex/issues/259
This commit is contained in:
Michael Yang 2024-04-22 16:49:20 +08:00 committed by GitHub
commit 4d6288641f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -26,6 +26,7 @@ import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
/**
@ -165,8 +166,14 @@ public class ClassUtil {
}
// 没有任何构造函数的情况下去查找 static 工厂方法满足 lombok 注解的需求
else {
// #issues-259 通过ModifyAttrsRecordProxyFactory.get方法调用时会给实体类创建一个代理类
// clazz就是这个代理类下面判断clazz == m.getReturnType()时就为false所以在这里加了个判断如果是代理类就获取其父类
Optional<Type> isProxy = Arrays.stream(clazz.getGenericInterfaces())
.filter(ProxyObject.class::isInstance)
.findAny();
final Class<T> entityClass = isProxy.isPresent() ? (Class<T>) clazz.getGenericSuperclass() : clazz;
Method factoryMethod = ClassUtil.getFirstMethod(clazz, m -> m.getParameterCount() == 0
&& clazz == m.getReturnType()
&& entityClass == m.getReturnType()
&& Modifier.isPublic(m.getModifiers())
&& Modifier.isStatic(m.getModifiers()));
if (factoryMethod != null) {