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的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如何部署
ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发
Openfire源码分析,比较详细的介绍
openfire-4.5.0源码。openfire是一个基于XMPP协议通信聊天的即时通讯框架,欢迎大家下载!!
openfire源码,即时通讯的服务端代码
openfire red5 spark 详细二次开发包,公司内部进行通信的二次开发很好的哦
openfire源码部署开发 openfire源码部署开发 openfire源码部署开发
详细介绍了openfire的源码部署流程及开发技术。
Openfire源码部署与开发,即时通消息工具部署
Linux环境下的openfire安装包,能够结合spark客户端进行即时通信
openfire安装---及时聊天 、、、、
openfire与libjingle都是即时通讯系统开发中的很牛的开源软件(库),openfire是支持java很好的jabber服务器,libjingle可以和gtalk通信,并实现了p2p以及电话等功能,由google公司release的。
Android应用源码开发Demo,主要用于毕业设计学习。
openfire3.10.1源码编译缺少的jar包: jetty-websocket-8.1.17.v20150415 jnsapi mina-core-1.1.7-sources.jar mina-filter-compression-1.1.7-sources.jar mina-filter-ssl-1.1.7-sources.jar mina-filter-ssl.jar ...
openfire4.1.3源码,最近GitHub下载很慢,通过代理完成下载,上传资源共大家分享。受限上传大小分包压缩,第二包免费。
这是openfire spark的源码 来自官方文档,