From 1d5549894647f356c286bf371f04a582cbc7c0e4 Mon Sep 17 00:00:00 2001 From: liyongjun1 Date: Mon, 25 Dec 2017 17:18:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89classloader=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当项目中使用了自定义classloader的时候,可以通过设置classloader上下文的方式来使得自己的mapper class能够被找到 --- .../java/tk/mybatis/mapper/util/MsUtil.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/tk/mybatis/mapper/util/MsUtil.java b/src/main/java/tk/mybatis/mapper/util/MsUtil.java index 34a168f87..6a6b1c121 100644 --- a/src/main/java/tk/mybatis/mapper/util/MsUtil.java +++ b/src/main/java/tk/mybatis/mapper/util/MsUtil.java @@ -44,11 +44,28 @@ public static Class getMapperClass(String msId) { throw new MapperException("当前MappedStatement的id=" + msId + ",不符合MappedStatement的规则!"); } String mapperClassStr = msId.substring(0, msId.lastIndexOf(".")); - try { - return Class.forName(mapperClassStr); - } catch (ClassNotFoundException e) { - return null; + ClassLoader[] classLoader = getClassLoaders(); + Class mapperClass = null; + for (ClassLoader cl : classLoader) { + if (null != cl) { + try { + mapperClass = Class.forName(mapperClassStr, true, cl); + if (mapperClass != null) { + break; + } + } catch (ClassNotFoundException e) { + // we'll ignore this until all class loaders fail to locate the class + } + } } + if (mapperClass == null) { + throw new MapperException("class loaders failed to locate the class " + mapperClassStr); + } + return mapperClass; + } + + private static ClassLoader[] getClassLoaders() { + return new ClassLoader[]{Thread.currentThread().getContextClassLoader(), MsUtil.class.getClassLoader()}; } /**