From e13b6259423a545f66547201a1dbd411ba20b3b2 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 8 Jul 2023 16:46:38 +0800 Subject: [PATCH] fix ClassLoaderUtil --- .../core/classloader/ClassLoaderUtil.java | 32 +++++++++++++------ .../core/classloader/ClassLoaderUtilTest.java | 6 ++++ hutool-extra/pom.xml | 4 +-- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java index c4ca28513..02378c2cf 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/classloader/ClassLoaderUtil.java @@ -13,6 +13,8 @@ package org.dromara.hutool.core.classloader; import org.dromara.hutool.core.exception.HutoolException; +import org.dromara.hutool.core.lang.Console; +import org.dromara.hutool.core.lang.caller.CallerUtil; import org.dromara.hutool.core.reflect.ClassDescUtil; import java.io.File; @@ -27,19 +29,21 @@ import java.io.File; public class ClassLoaderUtil { /** - * 获取{@link ClassLoader}
- * 获取顺序如下:
- * - *
-	 * 1、获取当前线程的ContextClassLoader
-	 * 2、获取当前类对应的ClassLoader
-	 * 3、获取系统ClassLoader({@link ClassLoader#getSystemClassLoader()})
-	 * 
+ * 获取{@link ClassLoader},获取顺序如下: + *
    + *
  1. 获取调用者的ContextClassLoader
  2. + *
  3. 获取当前线程的ContextClassLoader
  4. + *
  5. 获取ClassLoaderUtil对应的ClassLoader
  6. + *
  7. 获取系统ClassLoader({@link ClassLoader#getSystemClassLoader()})
  8. + *
* * @return 类加载器 */ public static ClassLoader getClassLoader() { - ClassLoader classLoader = getContextClassLoader(); + ClassLoader classLoader = CallerUtil.getCallerCaller().getClassLoader(); + if(null == classLoader){ + classLoader = getContextClassLoader(); + } if (classLoader == null) { classLoader = ClassLoaderUtil.class.getClassLoader(); if (null == classLoader) { @@ -49,6 +53,16 @@ public class ClassLoaderUtil { return classLoader; } + /** + * 获取调用者的{@link ClassLoader} + * + * @return {@link ClassLoader} + * @since 6.0.0 + */ + public static ClassLoader getCallerClassLoader() { + return CallerUtil.getCallerCaller().getClassLoader(); + } + /** * 获取当前线程的{@link ClassLoader} * diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java index cc9853a84..0e17d8ba9 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/classloader/ClassLoaderUtilTest.java @@ -6,6 +6,12 @@ import org.junit.jupiter.api.Test; public class ClassLoaderUtilTest { + @Test + void getCallerClassLoaderTest() { + final ClassLoader callerClassLoader = ClassLoaderUtil.getCallerClassLoader(); + Assertions.assertEquals(ClassLoaderUtilTest.class.getClassLoader(), callerClassLoader); + } + @Test public void isPresentTest() { final boolean present = ClassLoaderUtil.isPresent("org.dromara.hutool.core.classloader.ClassLoaderUtil"); diff --git a/hutool-extra/pom.xml b/hutool-extra/pom.xml index e623b26fa..dbfaf1436 100755 --- a/hutool-extra/pom.xml +++ b/hutool-extra/pom.xml @@ -32,7 +32,7 @@ org.dromara.hutool.extra 2.3 - 3.14.1.RELEASE + 3.15.6.RELEASE 1.4.2 2.3.32 4.9.21 @@ -43,7 +43,7 @@ 3.5.1 3.9.0 5.1.1 - 2.7.10 + 2.7.13