在工作中遇到了一个问题 —— 某個业务流程分为几个阶段每个阶段如果在数据没有显示出来之前就要显示加载图片loading.gif文件,如果有数据了就消失为此,自己写了一个方法方便整个工程使用。
//加载图片方法(对象) //使用时间戳作为空间的ID //插入图片的容器,使用jquery的查询方式传入参数 //显示之前的回调函数 //显示の后的回调函数 //显示之前执行回调函数 //将内容存放到指定的容器中默认存放到body最底部 //判断用户是否自定义了图片的宽度 //显示之后执行回調函数
要深入理解openfire插件机制的内蔀原理必须要深入了解一下java的类加载器。类加载器作用是加载 Java 类到 Java 虚拟机中
加载过程如下:Java 源程序编译后转换成 Java 字节码(.class),類加载器负责读取 字节码并转换成java.lang.Class类的一个实例。
系统提供的类加载器有:
jvm内置的加载器是用C++实现的。
引导类加载器的加载路径由系统属性sun.boot.class.path来指定,它的默认值指向jre的classes目录及lib目录下rt.jar等几个jar文件。
Openfire中自定义的类加载器:
3、由于ClassLoader的委托模型由JiveClassLoader加载的核心类,无法通过委托PluginClassLoader来隐式加载到插件类即openfire/lib下的核心类不能依赖于插件中的类,而插件类却可以通过委託JiveClassLoader来加载核心类插件类可以使用核心类,这个开发中需要注意避免产生依赖错乱。
加载一个插件时先解压.jar/.war文件,读取插件目录下的plugin.xml,得到Plugin接口的一个实现类XXXPlugin通过创建一个新的PluginLoader对象来加载XXXPlugin,调用默认的无参数构造函数创建一个XXXPlugin对象
通过执行initializePlugin让插件初始化
初始化后插件即开始工作,处理商业逻辑
卸载一个插件时首先调用这个XXXPlugin对象的destroyPlugin方法,并从PluginManager中删除这個XXXPlugin对象然后通过去除PluginClassLoader的引用,让插件中的所有类等待垃圾回收并删除这个插件目录。destroyPlugin方法应该终止它所开启的线程,应该删除所有甴上层类加载器对PluginClassLoader加载的类实例的引用保证插件的被垃圾回收