背景:看SpringBoot源码,org.springframework.boot.SpringApplication类,从构造函数跟到getSpringFactoriesInstances这个方法。该方法涉及ClassLoader、ContextClassLoader,不清楚这两个概念,因此看了几篇文章,总结一下。
ClassLoader分为Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader、Custom ClassLoader。
类加载顺序是按上面顺序来的。
每一个Thread都有一个ContextClassLoader,是为父加载类能访问子加载类能访问的资源而引入的,需要通过Thread.setContextClassLoader()设置。
ContextClassLoader一般在框架中用的多,因为涉及到动态加载资源。
PS: ClassPath包含当前工程或jar包的类及其依赖
参考链接:
https://blog.youkuaiyun.com/xyang81/article/details/7292380
https://blog.youkuaiyun.com/qbg19881206/article/details/8890600