1.openfire的入口main文件在src/java 文件夹下的org.jivesoftware.openfire.starter包中。
2.运行main函数之后openfire会调用start方法,首先是获取到ClassLoader对象。那么什么是ClassLoader对象呢?
下面具体学习ClassLoader的知识。
-
首先ClassLoader作用是加载Class文件到jvm中,供程序使用,java程序可以动态加载类定义,这个动态加载的机制就是通过ClassLoader来实现的。
-
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加载
-
ClassLoader 的加载模式:双亲委托模式进行加载。该模式的原理是:某个自定义的ClassLoader加载Class的时候都会先委托他的parnet ClassLoader加载该Class,当parent ClassLoader加载失败,再由当前的ClassLoader加载该Class,但是如果该ClassLoader的parent ClassLoader为null那么该ClassLoader的parent就是bootstrapClassLoader。
-
使用双亲委托模式的优点是:
第一:避免重复加载,当父亲已经加载了该类,那么子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]
相关推荐
Openfire源码 缺失的jar包- jetty-jmx-8.0.0.M2.jar 。还有其他jar包请查看
【标题】"openfire-red5-spark-rtmps-required-files" 涉及到的是一个针对企业内部通信的二次开发项目,它结合了Openfire、Red5和Spark这三款工具,以提供更加定制化的实时通信解决方案。 Openfire是一款开源的即时...
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中的部署步骤详解 #### 一、概述 本文将详细介绍如何在Eclipse开发环境中部署Openfire源代码。Openfire是一款基于XMPP协议的即时消息服务器,由Ignite Realtime组织开发并维护。由于其...
ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发
《Openfire 4.5.0源码解析:探索即时通讯框架的秘密》 Openfire,一个基于XMPP(Extensible Messaging and Presence Protocol)协议的开源即时通讯框架,因其高效、可扩展性和安全性,在IT领域备受青睐。4.5.0版本...
9. **国际化与本地化**:Openfire支持多种语言,源码中包含本地化处理,可以帮助理解如何在软件中实现多语言支持。 10. **日志系统**:良好的日志记录对于调试和监控系统状态至关重要。Openfire使用了Log4j或...
《Android应用源码之AdXmpp(Openfire+asmack+spark)——移动开发与毕业设计解析》 在Android应用开发领域,理解并掌握源码是提升技术水平的关键步骤。本项目"AdXmpp"是一个基于Android平台的源码示例,主要涉及到...
### Openfire源码部署开发详解 #### 一、Openfire简介 Openfire是一款开源的即时通讯服务器,基于XMPP协议栈。它支持多种客户端,并且能够处理大量的并发连接。Openfire以其灵活性、可扩展性和易用性而受到广泛欢迎...
### Openfire源码分析 #### 一、Openfire概述 **Openfire**是一款基于XMPP协议的开源实时通信服务器,XMPP(可扩展消息处理协议)又称为Jabber协议,是一种开放标准的即时通讯协议。Openfire的核心功能主要包括...
### Openfire源码部署与开发知识点详解 #### 一、Openfire简介 Openfire是一款开源的实时通信服务器,基于XMPP协议。它提供了一个高效、可扩展的消息传递平台,适用于企业级即时通讯应用。Openfire支持多种客户端接...
本教程将引导初学者了解如何开发第一个Openfire插件,从而深入理解Openfire的架构和插件开发流程。 1. **Openfire插件体系结构** Openfire插件是Java编写的独立模块,它们通过Openfire提供的API与核心服务交互。每...
### Openfire 安装指南 —— 即时聊天系统部署详解 #### 一、准备工作 在开始部署 Openfire 即时通讯系统之前,确保你已经准备好了必要的软件资源及环境。这里提供了一份 Openfire 项目的附件,包含了安装所需的...
Openfire主要由Java编写,因此我们需要一个Java开发环境,如JDK,确保其版本与Openfire的兼容。通常,Openfire需要Java 8或更高版本。安装JDK后,我们需要设置好JAVA_HOME环境变量,以便编译过程可以正确识别Java...
Openfire Spark 2.7.0 是一个基于Java的开源即时通讯(IM)客户端,它与Openfire服务器配合使用,提供了高效、安全的企业级聊天和协作解决方案。Spark使用XMPP协议,这是一种广泛采用的开放标准,用于实现即时消息...
Linux环境下的openfire安装包,能够结合spark客户端进行即时通信