diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/Mappers.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/Mappers.java index deb4a354..037825fc 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/Mappers.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/Mappers.java @@ -47,6 +47,7 @@ public class Mappers { /** * 通过 entity Class 获取 Mapper 对象 + * * @param entityClass * @param * @return mapper 对象 @@ -75,8 +76,8 @@ public class Mappers { } - static class MapperHandler implements InvocationHandler { + private Class mapperClass; private final SqlSessionFactory sqlSessionFactory = FlexGlobalConfig.getDefaultConfig().getSqlSessionFactory(); private final ExecutorType executorType = FlexGlobalConfig.getDefaultConfig().getConfiguration().getDefaultExecutorType(); @@ -91,9 +92,15 @@ public class Mappers { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - try (SqlSession sqlSession = openSession()) { - Object mapper = sqlSession.getMapper(mapperClass); - return method.invoke(mapper, args); + if ("getClass".equals(method.getName())) { + return mapperClass; + } else if ("toString".equals(method.getName())) { + return mapperClass.getName(); + } else { + try (SqlSession sqlSession = openSession()) { + Object mapper = sqlSession.getMapper(mapperClass); + return method.invoke(mapper, args); + } } } } 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 2ba8ac04..4aafe2db 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 @@ -24,13 +24,27 @@ import java.util.function.Predicate; /** * 类实例创建者创建者 - * Created by michael on 17/3/21. + * + * @author michael + * @date 17/3/21 */ public class ClassUtil { private ClassUtil() { } + private static final String[] OBJECT_METHODS = new String[]{ + "toString", + "getClass", + "equals", + "hashCode", + "wait", + "notify", + "notifyAll", + "clone", + "finalize" + }; + //proxy frameworks private static final List PROXY_CLASS_NAMES = Arrays.asList("net.sf.cglib.proxy.Factory" // cglib @@ -299,4 +313,8 @@ public class ClassUtil { } } + public static boolean isObjectMethod(String methodName) { + return ArrayUtil.contains(OBJECT_METHODS, methodName); + } + }