双亲委派机制(Parental Delegation)是一种在软件开发中常见的权限管理和类加载机制。
这种机制通常用于解决在复杂软件系统中的类加载、权限控制等问题。在Java语言中,双亲委派机制被广泛使用。它的基本思想是,当一个类加载器试图加载某个类时,它会先委托给其父类加载器,如果父类加载器无法加载,再由当前类加载器自己进行加载。这种层层委派的方式有助于保障类的唯一性,避免类的重复加载,并提高系统的安全性和稳定性。
一、类加载器层次结构
具体而言,Java的类加载器分为三个层次:
1.启动类加载器(Bootstrap Class Loader): 负责加载Java的核心库,是最顶层的类加载器,通常由C++编写。
2.扩展类加载器(Extension Class Loader): 负责加载Java的扩展库。
3.应用程序类加载器(Application Class Loader): 也称为系统类加载器,负责加载应用程序类路径上指定的类库。
二、工作原理
当一个类需要被加载时,先判断此类是否已经被加载,如果类已经被加载则返回。如果类没有被加载,然后依次委派给父类加载(父类加载时会判断该类有没有被自己加载过),如果父类加载器能够成功加载,则直接返回。这一过程一直持续到顶层的启动类加载器,否则依次由子类加载器尝试加载,通过这种逐级委派的方式,保证了类加载的有序性和唯一性。