👌如何破坏双亲委派模型
题目详细答案
自定义类加载器
通过创建自定义类加载器并覆盖loadClass方法,可以实现不同于双亲委派机制的类加载策略。
1 | public class CustomClassLoader extends ClassLoader { |
通过反射机制
利用反射机制直接操作类加载器的父类加载器,绕过双亲委派机制。
1 | import java.lang.reflect.Field; |
OSGi 框架
OSGi 框架提供了一种模块化的类加载机制,允许每个模块(Bundle)有自己的类加载器,从而可以打破双亲委派机制。
1 | // OSGi 中的 BundleActivator 示例 |
使用 SPI(Service Provider Interface)
某些服务提供者接口的实现中,可能需要打破双亲委派机制来加载服务实现类。
1 | import java.util.ServiceLoader; |
在META-INF/services目录下创建一个文件,文件名为接口的全限定名,文件内容为实现类的全限定名。通过这种方式,JVM 会使用Thread.contextClassLoader来加载服务实现类,从而可以打破双亲委派机制。