mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 09:08:24 +08:00
Merge pull request #321 from SnobbyVirus1973/main
fix: ClassUtil.newInstance无法生成实例问题修复 https://github.com/mybatis-flex/mybatis-flex/issues/259
This commit is contained in:
commit
4d6288641f
@ -26,6 +26,7 @@ import java.lang.reflect.Proxy;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -165,8 +166,14 @@ public class ClassUtil {
|
|||||||
}
|
}
|
||||||
// 没有任何构造函数的情况下,去查找 static 工厂方法,满足 lombok 注解的需求
|
// 没有任何构造函数的情况下,去查找 static 工厂方法,满足 lombok 注解的需求
|
||||||
else {
|
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
|
Method factoryMethod = ClassUtil.getFirstMethod(clazz, m -> m.getParameterCount() == 0
|
||||||
&& clazz == m.getReturnType()
|
&& entityClass == m.getReturnType()
|
||||||
&& Modifier.isPublic(m.getModifiers())
|
&& Modifier.isPublic(m.getModifiers())
|
||||||
&& Modifier.isStatic(m.getModifiers()));
|
&& Modifier.isStatic(m.getModifiers()));
|
||||||
if (factoryMethod != null) {
|
if (factoryMethod != null) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user