fix ClassLoaderUtil

This commit is contained in:
Looly 2023-07-08 16:46:38 +08:00
parent d71be8ef1f
commit e13b625942
3 changed files with 31 additions and 11 deletions

View File

@ -13,6 +13,8 @@
package org.dromara.hutool.core.classloader; package org.dromara.hutool.core.classloader;
import org.dromara.hutool.core.exception.HutoolException; 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 org.dromara.hutool.core.reflect.ClassDescUtil;
import java.io.File; import java.io.File;
@ -27,19 +29,21 @@ import java.io.File;
public class ClassLoaderUtil { public class ClassLoaderUtil {
/** /**
* 获取{@link ClassLoader}<br> * 获取{@link ClassLoader}获取顺序如下
* 获取顺序如下<br> * <ol>
* * <li>获取调用者的ContextClassLoader</li>
* <pre> * <li>获取当前线程的ContextClassLoader</li>
* 1获取当前线程的ContextClassLoader * <li>获取ClassLoaderUtil对应的ClassLoader</li>
* 2获取当前类对应的ClassLoader * <li>获取系统ClassLoader{@link ClassLoader#getSystemClassLoader()}</li>
* 3获取系统ClassLoader{@link ClassLoader#getSystemClassLoader()} * </ol>
* </pre>
* *
* @return 类加载器 * @return 类加载器
*/ */
public static ClassLoader getClassLoader() { public static ClassLoader getClassLoader() {
ClassLoader classLoader = getContextClassLoader(); ClassLoader classLoader = CallerUtil.getCallerCaller().getClassLoader();
if(null == classLoader){
classLoader = getContextClassLoader();
}
if (classLoader == null) { if (classLoader == null) {
classLoader = ClassLoaderUtil.class.getClassLoader(); classLoader = ClassLoaderUtil.class.getClassLoader();
if (null == classLoader) { if (null == classLoader) {
@ -49,6 +53,16 @@ public class ClassLoaderUtil {
return classLoader; return classLoader;
} }
/**
* 获取调用者的{@link ClassLoader}
*
* @return {@link ClassLoader}
* @since 6.0.0
*/
public static ClassLoader getCallerClassLoader() {
return CallerUtil.getCallerCaller().getClassLoader();
}
/** /**
* 获取当前线程的{@link ClassLoader} * 获取当前线程的{@link ClassLoader}
* *

View File

@ -6,6 +6,12 @@ import org.junit.jupiter.api.Test;
public class ClassLoaderUtilTest { public class ClassLoaderUtilTest {
@Test
void getCallerClassLoaderTest() {
final ClassLoader callerClassLoader = ClassLoaderUtil.getCallerClassLoader();
Assertions.assertEquals(ClassLoaderUtilTest.class.getClassLoader(), callerClassLoader);
}
@Test @Test
public void isPresentTest() { public void isPresentTest() {
final boolean present = ClassLoaderUtil.isPresent("org.dromara.hutool.core.classloader.ClassLoaderUtil"); final boolean present = ClassLoaderUtil.isPresent("org.dromara.hutool.core.classloader.ClassLoaderUtil");

View File

@ -32,7 +32,7 @@
<Automatic-Module-Name>org.dromara.hutool.extra</Automatic-Module-Name> <Automatic-Module-Name>org.dromara.hutool.extra</Automatic-Module-Name>
<!-- versions --> <!-- versions -->
<velocity.version>2.3</velocity.version> <velocity.version>2.3</velocity.version>
<beetl.version>3.14.1.RELEASE</beetl.version> <beetl.version>3.15.6.RELEASE</beetl.version>
<rythm.version>1.4.2</rythm.version> <rythm.version>1.4.2</rythm.version>
<freemarker.version>2.3.32</freemarker.version> <freemarker.version>2.3.32</freemarker.version>
<enjoy.version>4.9.21</enjoy.version> <enjoy.version>4.9.21</enjoy.version>
@ -43,7 +43,7 @@
<zxing.version>3.5.1</zxing.version> <zxing.version>3.5.1</zxing.version>
<net.version>3.9.0</net.version> <net.version>3.9.0</net.version>
<emoji-java.version>5.1.1</emoji-java.version> <emoji-java.version>5.1.1</emoji-java.version>
<spring-boot.version>2.7.10</spring-boot.version> <spring-boot.version>2.7.13</spring-boot.version>
</properties> </properties>
<dependencies> <dependencies>