AbstractBeanFactory --> ClassUtils.getDefaultClassLoader()->( Thread.currentThread().getContextClassLoader() or ClassLoader.getSystemClassLoader() ) --> AppClassLoader (默认情况下会拿到)
@Nullable
public static ClassLoader getDefaultClassLoader() {
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
} catch (Throwable var3) {
}
if (cl == null) {
cl = ClassUtils.class.getClassLoader();
if (cl == null) {
try {
cl = ClassLoader.getSystemClassLoader();
} catch (Throwable var2) {
}
}
}
return cl;
}
设置sping的类加载器:
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
context.getBeanFactory().setBeanClassLoader();
设置当前线程的类加载器:
//tom cat 会使用该方法设置自定义类加载器
Thread.currentThread().setContextClassLoader()