关于线程上下文类加载器的一个疑问
来源:6-6 ClassLoader的双亲委派机制
qq_君君晨晨_0
2020-09-13
我在查阅为什么需要上下文类加载器时看到了如下的解释:
这里以数据库的spi来举例
JDBC 相关的这些接口,在启动的时候,是由启动类加载器(boost classLoader)去加载的。而通常数据库厂商所提供的实现类是由系统类加载器来去加载的。
这样一来,接口是由启动类加载器加载的,而具体的实现是由应用类加载器加载的。根据类的双亲委托原则,父加载器所加载的类/接口是看不到子加载器所加载的类/接口的,而然,子加载器所加载的类/接口是能够看到父加载器的类/接口的。这样的话,会导致这样一个局面:JDBC 相关的代码可能还需要去调用具体实现类中的代码,但是它是无法看到具体的实现类的(因为是由其子加载器加载的)。
这里的看到指的是什么意思呢,我的想法是既然接口和实现类都加载了,那就用就行了呗,不能看到指的是找不到具体实现类么还是?如果不能看到会带来的问题是什么呢?
写回答
1回答
-
翔仔
2020-09-13
同学好,主要是当前负责加载接口的类加载器里面找不到子类也就是实现的信息,需要通过双亲委派机制从子classloader里面获取
00
相似问题