Java SPI(Service Provider Interface)机制破坏双亲委派模型,主要是因为核心类库(由顶层类加载器加载)需要去加载和实例化由第三方提供的具体实现类(由底层类加载器加载),这违背了双亲委派模型中“子类加载器向上委托”的单向依赖原则。 为了让你清晰地理解这个过程,我们分步骤来剖析: 1. 回顾:什么是正常的“双亲委派模型”? 在正常的双亲委派模型中,类加载的顺序是自下而上的(向上委托): Application ClassLoader(应用类加载器)遇到类加载请求,委托给父加载器。 Extension ClassLoader(扩展类加载器)继续向上委托。 Bootstrap ClassLoader(启动类加载器)尝试加载。如果加载不到,再逐层向下交由子加载器尝试加载。 核心规则:父类加载器对子类加载器是不可见的。也就是说,启动类加载器只能加载核心类(如 ),它无法去调用或加载位于应用 Classpath 下的用户类。 2. 冲突产生:SPI 面临的困境 SPI 的核心思想是:Java 官方定义接口,第三方厂商提供实现。最典型的例子就是 JDBC。 接口在...