6 双亲委派机制

6 双亲委派机制

由于Java虚拟机中有多个类加载器双亲委派机制的核心是解决一个类到底由谁加载的问题

双亲委派机制的作用

  • 保证类加载的安全性

    通过双亲委派机制避免恶意代码替换JDK中的核心类库,比如java.lang.String,确保核心类库的完整性和安全性

  • 避免重复加载

    可以避免同一个类被加载多次

打破双亲委派机制

打破双亲委派机制的三种方式:

  • 自定义类加载器

    自定义类加载器并且重写loadClass方法,就可以将双亲委派机制的代码去除

  • 线程上下文类加载器

    利用上下文类加载器加载类,比如JNDI、JDBC、JCE、JAXB和JBI等框架使用了SPI机制+线程上下文类加载器

  • OSGI框架的类加载器

    OSGI实现了一整套类加载机制,允许同级类加载器之间互相调用

为什么要打破双亲委派机制

相同的类加载器+相同的类限定名会冲突例:一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类Tomcat要保证这两个类都能加载并且它们应该是不同的类。如果不打破双亲委派机制,当应用类加载器加载Web应用1中的MyServlet之后,Web应用2中相同限定名的MyServlet类就无法被加载了。

posted @ 2024-03-05 15:41  渺阴丶  阅读(40)  评论(0)    收藏  举报