在Java中,Tomcat与SPI(Service Provider Interface)机制打破了双亲委派机制的限制,使得应用程序可以加载自己的类,而不仅仅依赖于Java的标准类库。

双亲委派机制是指当一个类加载器(ClassLoader)加载一个类时,它首先会委托给其父类加载器加载。只有当父类加载器无法加载该类时,才会由当前类加载器加载。这样的机制确保了类的加载是有序的,避免了类的重复加载和冲突。

然而,有些时候,应用程序需要加载自己的类,而不是依赖于父类加载器。这就需要打破双亲委派机制。Tomcat和SPI机制都是通过自定义类加载器来实现的。

Tomcat使用自定义的WebAppClassLoader来加载Web应用程序中的类。这个类加载器继承自Java标准库中的URLClassLoader,并重写了loadClass()方法。在loadClass()方法中,Tomcat首先尝试使用双亲委派机制加载类,如果失败,则会调用自己的findClass()方法加载类。这样就可以在Web应用程序中加载自定义的类。

SPI机制是Java标准库提供的一种扩展机制,允许应用程序通过配置文件指定接口的具体实现类。SPI机制中,应用程序通过调用ServiceLoader.load()方法加载接口的实现类。在加载实现类时,Java使用的是当前线程的上下文类加载器(ContextClassLoader),而不是双亲委派机制。这样就可以加载应用程序自己的类。

总的来说,Tomcat和SPI机制都通过自定义类加载器来打破双亲委派机制。Tomcat使用自定义的WebAppClassLoader加载Web应用程序中的类,而SPI机制使用当前线程的上下文类加载器加载应用程序自己的类。这样就实现了应用程序加载自身类的需求

Java中Tomcat与Spi机制是如何打破双亲委派机制的

原文地址: http://www.cveoy.top/t/topic/iY27 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录