父类委托模式

classLoader中采用了父类委托模式,类加载器有三种:bootstrap classloader(爷爷)、Extclassloader(父亲)、APPclassloader。也可以自定义类加载器,可以加载指定文件夹下的类。

所谓父类委托模式就是,类加载器本身不去加载类,而是将加载任务交给父类加载器完成。

protected synchronized Class loadClass(String name, boolean resolve) 
    throws ClassNotFoundException{  
     // 首先检查该name指定的class是否有被加载  
     Class c = findLoadedClass(name);  
     if (c == null) {  
         try {  
             if (parent != null) {  
                 //如果parent不为null,则调用parent的loadClass进行加载  
                 c = parent.loadClass(name, false);  
             }else{  
                 //parent为null,则调用BootstrapClassLoader进行加载  
                 c = findBootstrapClass0(name);  
             }  
         }catch(ClassNotFoundException e) {  
             //如果仍然无法加载成功,则调用自身的findClass进行加载              
             c = findClass(name);  
         }  
     }  
     if (resolve) {  
         resolveClass(c);  
     }  
     return c;  
}

优点是安全(避免自定义类库代替核心类库)、避免重复加载。缺点就是单向的,委托永远是子加载器去请求父加载器,是单向的,即上层的类加载器无法访问下层的类加载器所加载的类。spi方式可以解决,循环迭代加载实现类。

classloader中比较重要的方法:loadclass、defineclass、forname、findsystemclass、resolveClass、findLoadedClass

findclass。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值