Java应用类加载器原理与应用

原创 2015年11月17日 18:47:48

Java类加载器架构

在典型的Java SE应用程序中,Java SE平台中java.*包下的类都将被加载到特定的根类加载器中,并且不能被覆盖。
这时Java的一种安全机制,这种机制能够有效的阻止恶意代码的执行。例如:替换String类,或是重定义Boolean.TRUE和Boolean.FALSE。

Java SE中的类加载机制

在Java SE中,根类加载器的之后是扩展类加载器,它主要用于加载JRE安装目录下的扩展JAR文件。接下来才是我们自己实现的应用程序类加载器,
应用程序类加载器将加载应用程序中的所有其它类。这样的类加载器顺序变组成了类加载器的层次结构:
- 根类加载器是所有类加载器最早的祖先。
- 当低级别的类加载器申请加载一个类时,它总是首先将该任务委托给它的父类加载器。
- 父类加载器收到委托后将继续向上委托直至根类加载器确认成功。
- 如果类加载器的父类加载器未能够找到要加载的类,那么当前的类加载器将尝试从自己的JAR文件和目录中加载目标类。
这样的类加载过程被称为: 双亲优先类加载委托模式

Java EE中的类加载机制

在Java EE平台中,Java SE的类加载机制在大部分单机Web应用情况下依然还是适用的。但是,由于运行Java EE Web应用程序的服务器通常都相当复杂,不同的服务器供应商有着自己不同的实现方案。服务器很有可能适用了与我们自己的Web应用程序相同的第三方库,或者是不同的服务器实现厂商都使用同样的第三方库等。这时,这几者之间有极大的可能出现文件版本冲突。这个时候如果继续使用Java SE中的类加载机制,冲突发生的概率将更进一步增加。
为了解决上面的Web应用中存在的问题,我们需要在Java EE Web应用中采用另外一种类加载机制– 子女优先类加载委托模式
在Java EE Web应用服务器中,每个Web应用程序都被分配了一个自由的、相互隔离的类加载器,它们都继承自公共的服务类加载器
通过上面的这种隔离机制,使得不同的应用程序相互隔离开来,不同的应用之间不能访问对方的类。不仅解决了Java SE中双亲优先类加载委托模式带来的冲突问题,同时也使得Web应用程序更加安全的运行。
通过这种:子女优先类加载委托模式,类加载的任务会在最后而不是优先委托给它的父亲,而是优先由子女进行加载。这样,Web应用程序中的类和库将会被优先使用,而不是服务器中的自带的库优先加载。这样的模式有助于解决很多版本冲突问题,但是并不能保证能解决所有问题,这时解决的方案更多的是依赖于服务器提供给商解决。

最后:为了维持绑定的Java SE类的安全状态,Web应用程序类加载器仍然会在尝试加载任何类之前先与根类加载器进行确认

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java类加载器原理

  • 2012年05月26日 12:03
  • 21KB
  • 下载

黑马程序员--java高新技术--类加载器的深入讲解与应用

---------------------- android培训、java培训、期待与您交流! ---------------------- =========第8单元:类加载器的深入讲解与应用...

JAVA加密解密---自定义类加载器应用

最近在研究JAVA CLASS LOADING技术,已实现了一个自定义的加载器。对目前自定义加载器的应用,还在探讨中。下面是自定义的CLASSLOADER在JAVA加密解密方面的一些研究。 JA...

黑马程序员_Java高新技术_类加载器的深入讲解与应用

------- android培训、java培训、期待与您交流! ---------- 初识类加载器 它的作用:它是用来加载类的工具。   Java虚拟机中可以安装多个类加载器,系统默认三...

黑马程序员 java高新技术<四>--类加载器、动态代理技术的深入讲解与应用

-------android培训、java培训、java学习型技术博客、期待与您交流! ----------                                       ...

JAVA加密解密---自定义类加载器应用

JAVA安全     JAVA是解释执行的语言,对于不同的操作平台都有相应的JVM对字节码文件进行解释执行。而这个字节码文件,也就是我们平时所看到的每一个.class文件。     这是我...
  • syl469
  • syl469
  • 2012年07月15日 12:10
  • 655

java类加载器及常用java应用服务器类加载机制简介

以下内容出自一个同事的整理资料。   一。java类加载器机制简介   这个由Bootstrap Loader -> ExtClassLoader -> AppClassLoader,就是...

Tomcat的WebappClassLoader(web应用类加载器)详解(一)

Tomcat负责Web应用的类加载的是org.apache.catalina.loader.WebappClassLoader,它有几个比较重要的方法:findClass(),loadClass(),...

Tomcat的WebappClassLoader(web应用类加载器)详解(一)

Tomcat负责Web应用的类加载的是org.apache.catalina.loader.WebappClassLoader,它有几个比较重要的方法:findClass(),loadClass(),...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java应用类加载器原理与应用
举报原因:
原因补充:

(最多只允许输入30个字)