ClassLoaderUtils
- BootstrapLoader
- ExtClassLoader
- AppClassLoader(SystemClassLoader) ```java package com.javabook.classloader.utils;
import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Stack;
/**
- @author Summer Lu
- @email gmluyang@gmail.com
@date 2014-8-25 / public class ClassLoaderUtils {
/**
@return */ public static ClassLoader getBootstrapLoader() { return getExtClassLoader().getParent(); }
/**
@return */ public static ClassLoader getExtClassLoader() { return getAppClassLoader().getParent(); }
/**
@return */ public static ClassLoader getAppClassLoader() { return ClassLoader.getSystemClassLoader(); }
/**
@return */ public static ClassLoader getThreadClassLoader() {
ClassLoader classLoader = null; try {
classLoader = Thread.currentThread().getContextClassLoader();
} catch (Exception e) {
e.printStackTrace();
} return classLoader; }
/**
@return */ public static ClassLoader getCurrentClassLoader() { return ClassLoaderUtils.class.getClassLoader(); }
/**
@return */ public static ClassLoader[] getHierarchyClassLoadersDesc() {
ListhierarchyClassLoaders = new ArrayList (); getHierarchyClassLoaders(hierarchyClassLoaders, getCurrentClassLoader()); Collections.reverse(hierarchyClassLoaders); return hierarchyClassLoaders.toArray(new ClassLoader[hierarchyClassLoaders.size()]); } /**
- @param classLoaders
- @param currentClassLoader
@return */ private static void getHierarchyClassLoaders(Collection
classLoaders, ClassLoader currentClassLoader) { classLoaders.add(currentClassLoader); if(currentClassLoader!=null) { ClassLoader parentClassLoader = currentClassLoader.getParent(); getHierarchyClassLoaders(classLoaders, parentClassLoader);
} }
/* */ public static void printHierarchyClassLoadersDesc() { ClassLoader[] classLoaders = getHierarchyClassLoadersDesc();
StringBuffer classLoaderTree = new StringBuffer(); for (int i = 0; i < classLoaders.length; i++) {
ClassLoader classLoader = classLoaders[i]; for (int j = 0; j < i+1; j++) { classLoaderTree.append("-"); } if(classLoader==null) classLoaderTree.append("null").append("\n"); else classLoaderTree.append(classLoader.toString()).append("\n");
}
System.out.println(classLoaderTree); } }
<a name="the-console-of-the-classloaderutils"></a>
# ClassLoaderUtilsMain
- ExtClassLoader
![image.png](https://cdn.nlark.com/yuque/0/2020/png/179935/1609261112631-3ff7bac5-d7cc-4699-b554-cdffbcb05544.png#align=left&display=inline&height=349&margin=%5Bobject%20Object%5D&name=image.png&originHeight=349&originWidth=642&size=39541&status=done&style=none&width=642)
```java
package com.javabook.classloader.utils;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.*;
/**
* @author Summer Lu
* @email gmluyang@gmail.com
* @date 2014-8-25
*
*/
public class ClassLoaderUtilsMain {
/**
* @param args
* @throws IOException
* @throws URISyntaxException
*/
public static void main(String[] args) throws IOException, URISyntaxException {
System.out.println("BootstrapLoader:" + ClassLoaderUtils.getBootstrapLoader());
System.out.println("ExtClassLoader:" + ClassLoaderUtils.getExtClassLoader());
System.out.println("AppClassLoader:" + ClassLoaderUtils.getAppClassLoader());
System.out.println("----------------------------------------------------------------");
System.out.println("\nHierarchy-ClassLoadersDesc:");
ClassLoaderUtils.printHierarchyClassLoadersDesc();
System.out.println("----------------------------------------------------------------");
System.out.println("java.lang.String.class.getClassLoader():" + java.lang.String.class.getClassLoader());
System.out.println("com.sun.java.accessibility.util.AWTEventMonitor.class.getClassLoader():" + com.sun.java.accessibility.util.AWTEventMonitor.class.getClassLoader());
System.out.println("ClassLoaderUtilsMain.class.getClassLoader():" + ClassLoaderUtilsMain.class.getClassLoader());
System.out.println("Thread.currentThread().getContextClassLoader():" + Thread.currentThread().getContextClassLoader());
}
}
Console
BootstrapLoader:null
ExtClassLoader:sun.misc.Launcher$ExtClassLoader@74a14482
AppClassLoader:sun.misc.Launcher$AppClassLoader@18b4aac2
----------------------------------------------------------------
Hierarchy-ClassLoadersDesc:
-null
--sun.misc.Launcher$ExtClassLoader@74a14482
---sun.misc.Launcher$AppClassLoader@18b4aac2
----------------------------------------------------------------
java.lang.String.class.getClassLoader():null
com.sun.java.accessibility.util.AWTEventMonitor.class.getClassLoader():sun.misc.Launcher$ExtClassLoader@74a14482
ClassLoaderUtilsMain.class.getClassLoader():sun.misc.Launcher$AppClassLoader@18b4aac2
Thread.currentThread().getContextClassLoader():sun.misc.Launcher$AppClassLoader@18b4aac2
Process finished with exit code 0