mybatis中资源文件的加载是通过 Resources 这个类来实现的,Resources这个类又通过ClassLoaderWrapper这个类来包装多个类加载器,通过这些类加载器来加载资源。
ClassLoaderWrapper 包装了这些类加载器:
{classLoader, //参数传入的类加载器
defaultClassLoader, //自己定义的默认类加载器
Thread.currentThread().getContextClassLoader(), //当前线程的的类加载器
getClass().getClassLoader(), //本类的类加载器
systemClassLoader} //系统类加载器(AppClassLoader)
源码如下:
ClassLoader[] getClassLoaders(ClassLoader classLoader) { return new ClassLoader[]{ classLoader, defaultClassLoader, Thread.currentThread().getContextClassLoader(), getClass().getClassLoader(), systemClassLoader}; }
加载资源的时候依次会循环调用这个类加载器来加载资源