From 6d50a6228bc587ea636da44a81c15fc4d4bfb14d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Sun, 30 Jul 2023 11:22:53 +0800 Subject: [PATCH] feat: ClassUtil.newInstance() add create from factory method support --- .../main/java/com/mybatisflex/core/util/ClassUtil.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java index 266d9901..541018a8 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java @@ -138,6 +138,16 @@ public class ClassUtil { } return (T) otherConstructor.newInstance(parameters); } + // 没有任何构造函数的情况下,去查找 static 工厂方法,满足 lombok 注解的需求 + else { + Method factoryMethod = ClassUtil.getFirstMethod(clazz, m -> m.getParameterCount() == 0 + && clazz.isAssignableFrom(m.getReturnType()) + && Modifier.isPublic(m.getModifiers()) + && Modifier.isStatic(m.getModifiers())); + if (factoryMethod != null) { + return (T) factoryMethod.invoke(null); + } + } throw new IllegalArgumentException("the class \"" + clazz.getName() + "\" has no constructor."); } catch (Exception e) { throw new RuntimeException("Can not newInstance class: " + clazz.getName());