什么是双亲委派模型

652 阅读1分钟

双亲委派是什么

每个类加载器收到加载类的请求时,都会把这个请求委派给自己的父加载器。当父加载器不能加载这个类时,则会将任务返回给子加载器

双亲委派的好处

  1. 防止重复加载类
  2. 安全。java核心api被篡改。假设通过网络传递一个名为java.lang.Integer的类,通过双亲委托模式传递到启动类加载器,而启动类加载器在核心Java API发现这个名字的类,发现该类已被加载,并不会重新加载网络传递的过来的java.lang.Integer,而直接返回已加载过的Integer.class,这样便可以防止核心API库被随意篡改。可能你会想,如果我们在classpath路径下自定义一个名为java.lang.SingleInterge类(该类是胡编的)呢?该类并不存在java.lang中,经过双亲委托模式,传递到启动类加载器中,由于父类加载器路径下并没有该类,所以不会加载,将反向委托给子类加载器加载,最终会通过系统类加载器加载该类。但是这样做是不允许,因为java.lang是核心API包,需要访问权限,强制加载将会报出异常