`

openfire源码解读第一节----ClassLoader的认识与理解

阅读更多

1.openfire的入口main文件在src/java 文件夹下的org.jivesoftware.openfire.starter包中。

2.运行main函数之后openfire会调用start方法,首先是获取到ClassLoader对象。那么什么是ClassLoader对象呢?

下面具体学习ClassLoader的知识。

  1. 首先ClassLoader作用是加载Class文件到jvm中,供程序使用,java程序可以动态加载类定义,这个动态加载的机制就是通过ClassLoader来实现的。

  2. ClassLoader 是加载Class文件的(ExtClassLoader和AppClassLoader也在此时被加载),那么ClassLoader又被谁加载呢?是一 个被不是java语言所编写的ClassLoader来加载的,这个ClassLoader就是bootstrapClassLoader(启动类加载 器)。这个加载器在jvm运行的时候加载java核心的api以满足java程序最基本的需求。其中包括用户定义的ClassLoader,用户定义的 ClassLoader就是通过程序创建的ClassLoader,那么也有非程序员创建的ClassLoader,就是jvm自己提供的吧(这句是自己 理解的)。用户自定义的ClassLoader有ExtClassLoader,ExtClassLoader加载java的扩展的api,也就是 /lib/ext中的类。用户自定义的ClassLoader还有AppClassLoader,AppClassLoader用户机器上的 CLASSPATH设置目录中的Class的,通常在没有指定ClassLoader的情况下,程序自定义的类由AppClassLoader加载

  3. ClassLoader 的加载模式:双亲委托模式进行加载。该模式的原理是:某个自定义的ClassLoader加载Class的时候都会先委托他的parnet ClassLoader加载该Class,当parent ClassLoader加载失败,再由当前的ClassLoader加载该Class,但是如果该ClassLoader的parent ClassLoader为null那么该ClassLoader的parent就是bootstrapClassLoader。

  4. 使用双亲委托模式的优点是:

    第一:避免重复加载,当父亲已经加载了该类,那么子ClassLoader就没有必要加载该class了。

    第二:安全因素。

     

3.获取当前类的类类加载器的方法:

public ClassLoader findParentClassLoader(){ 
//获取父类加载器 
    ClassLoader parent = Thread.currentThread().getContextClassLoader(); 
if(parent==null){ 
    parent = this.getClass().getClassLoader(); 
    if(parent==null){ 
        parent = ClassLoader.getSystemClassLoader(); 
} 
} 
return parent; 
}

4.类加载器的种类:

  •  bootstrap class Loader(引导类加载器) 用来加载java的核心类库

  •  extensions class loader(扩展类加载器) 用来加载java的扩展库Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类[ExtClassLoader]

  • 系统类加载器(system class loader)Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader() 来获取它[AppClassLoader]

     

     

 

1
2
分享到:
评论
3 楼 leaow567 2013-05-20  
表达不严谨“用户自定义的ClassLoader有ExtClassLoader”么??
2 楼 leaow567 2013-05-20  
顶起!一起学习
1 楼 ywbrj042 2013-05-20  
我们也在用这个,也在看openfire的源代码。以后可以一起交流!

相关推荐

    Openfire源码 缺失的jar包- jetty-jmx-8.0.0.M2.jar

    Openfire源码 缺失的jar包- jetty-jmx-8.0.0.M2.jar 。还有其他jar包请查看

    openfire-red5-spark-rtmps-required-files

    【标题】"openfire-red5-spark-rtmps-required-files" 涉及到的是一个针对企业内部通信的二次开发项目,它结合了Openfire、Red5和Spark这三款工具,以提供更加定制化的实时通信解决方案。 Openfire是一款开源的即时...

    Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2

    Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2

    openfire 源码 Eclipse部署

    ### Openfire源码在Eclipse中的部署步骤详解 #### 一、概述 本文将详细介绍如何在Eclipse开发环境中部署Openfire源代码。Openfire是一款基于XMPP协议的即时消息服务器,由Ignite Realtime组织开发并维护。由于其...

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 您可以上传小于60MB的文件

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发

    openfire-4.5.0源码

    《Openfire 4.5.0源码解析:探索即时通讯框架的秘密》 Openfire,一个基于XMPP(Extensible Messaging and Presence Protocol)协议的开源即时通讯框架,因其高效、可扩展性和安全性,在IT领域备受青睐。4.5.0版本...

    openfire源码

    9. **国际化与本地化**:Openfire支持多种语言,源码中包含本地化处理,可以帮助理解如何在软件中实现多语言支持。 10. **日志系统**:良好的日志记录对于调试和监控系统状态至关重要。Openfire使用了Log4j或...

    Android应用源码之AdXmpp(Openfire+asmack+spark)-IT计算机-毕业设计.zip

    《Android应用源码之AdXmpp(Openfire+asmack+spark)——移动开发与毕业设计解析》 在Android应用开发领域,理解并掌握源码是提升技术水平的关键步骤。本项目"AdXmpp"是一个基于Android平台的源码示例,主要涉及到...

    openfire源码部署开发

    ### Openfire源码部署开发详解 #### 一、Openfire简介 Openfire是一款开源的即时通讯服务器,基于XMPP协议栈。它支持多种客户端,并且能够处理大量的并发连接。Openfire以其灵活性、可扩展性和易用性而受到广泛欢迎...

    Openfire源码分析

    ### Openfire源码分析 #### 一、Openfire概述 **Openfire**是一款基于XMPP协议的开源实时通信服务器,XMPP(可扩展消息处理协议)又称为Jabber协议,是一种开放标准的即时通讯协议。Openfire的核心功能主要包括...

    Openfire源码部署与开发.doc

    ### Openfire源码部署与开发知识点详解 #### 一、Openfire简介 Openfire是一款开源的实时通信服务器,基于XMPP协议。它提供了一个高效、可扩展的消息传递平台,适用于企业级即时通讯应用。Openfire支持多种客户端接...

    第一个openfire插件源码及说明

    本教程将引导初学者了解如何开发第一个Openfire插件,从而深入理解Openfire的架构和插件开发流程。 1. **Openfire插件体系结构** Openfire插件是Java编写的独立模块,它们通过Openfire提供的API与核心服务交互。每...

    openfire安装---及时聊天

    ### Openfire 安装指南 —— 即时聊天系统部署详解 #### 一、准备工作 在开始部署 Openfire 即时通讯系统之前,确保你已经准备好了必要的软件资源及环境。这里提供了一份 Openfire 项目的附件,包含了安装所需的...

    openfire3.9.1 源码部署及运行

    Openfire主要由Java编写,因此我们需要一个Java开发环境,如JDK,确保其版本与Openfire的兼容。通常,Openfire需要Java 8或更高版本。安装JDK后,我们需要设置好JAVA_HOME环境变量,以便编译过程可以正确识别Java...

    openfire spark 2.7.0源码

    Openfire Spark 2.7.0 是一个基于Java的开源即时通讯(IM)客户端,它与Openfire服务器配合使用,提供了高效、安全的企业级聊天和协作解决方案。Spark使用XMPP协议,这是一种广泛采用的开放标准,用于实现即时消息...

    openfire-4.2.0-1.noarch.rp

    Linux环境下的openfire安装包,能够结合spark客户端进行即时通信

Global site tag (gtag.js) - Google Analytics