欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于应用服务器Apusic中ClassLoader(类加载器)的使用情况 应用服务器javaApusic 

程序员文章站 2022-03-05 17:02:00
...
实际加载应用时用到的ClassLoader如下:

1、 加载Apusic公共包,即<Apusic_Home>/lib/或者<Apusic_Home>/common或者<Apusic_Home>/sp或者<Apusic_Home>/classes下时用到的ClassLoader如下:

sun.misc.Launcher$AppClassLoader



注意:同一个域下或者JVM下的此AppClassLoader实例是同一个。

换句话说,加载Apusic server下的jar或者class或者域(mydomain)的lib下的jar时,用且仅用到一个AppClassLoader实例,为:



2、 加载War应用时,用到的ClassLoader如下:

com.apusic.web.container.ReloadableClassLoader

注意:加载<your_war_name>/WEB-INF/lib或者<your_war_name>/WEB-INF/classes,用到ReloadableClassLoader,并且同一个war应用下是同一个ReloadableClassLoader实例,不同的war应用,引用不同的ReloadableClassLoader的实例。



3、 加载EAR应用中的EJB时,用的ClassLoader如下:

com.apusic.util.DynamicClassLoader

注意:com.apusic.util.DynamicClassLoader是类加载器

com.apusic.web.container.ReloadableClassLoader的父类;



说明:

(1)、java classloader的继承关系:

sun.misc.Launcher$AppClassLoader=>java.net.URLClassLoader=>java.security.SecureClassLoader=>java.lang.ClassLoader

java定义中:sun.misc.Launcher$ExtClassLoader和sun.misc.Launcher$AppClassLoader是brother关系,不是father-child关系

(2)、apusic classloader的继承关系:

com.apusic.web.container.ReloadableClassLoader=>com.apusic.util.DynamicClassLoader=>com.apusic.util.UCPClassLoader=>java.security.SecureClassLoader=>java.lang.ClassLoader

(3)、loading:
(I)、ClassLoader =>bootstrap loader
(II)、System ClassLoader(AppClassLoader) =>ClassLoader.getSystemClassLoader() =>sun.misc.Launcher$AppClassLoader
(III)、System ClassLoader's parent (ExtClassLoader)=>sun.misc.Launcher$ExtClassLoader
但实际JVM在加载时,将ExtClassLoader视作AppClassLoader的父加载器。

(IV)、实际使用中:Apusic中的ClassLoader继承关系:
com.apusic.web.container.ReloadableClassLoader=>com.apusic.util.DynamicClassLoader=>sun.misc.Launcher$AppClassLoader