今天看到了javaworld上的一篇文章,该文章讨论了通过结合JVM的类加载机制、Java语言的动态代理技术以及Java的编译技术来实现一个类的动态加载功能,具体可参考http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.html。
该文章中给出的源代码中,对Java源代码的编译中依赖于sun的类库,在JDK1.6中,引入了Java的编译API,我们可以修改改代码,让其应用JDK1.6编译API。其实现原理是定期去检查源代码的文件是否被更新,如果被更新了,则重新编译改源代码然后重新载入,更新其类的定义。我们可以考虑基于事件机制,而不是去定期检查源代码的更新情况来实现动态加载。毕竟动态检查源代码对性能还是有消耗的,特别是当源代码文件数比较多的时候。
我的想法是这样子的,用户可以触发一个事件,例如用户可以提供一个类的全名,告诉Java应用这个类已经被修改,该类被修改的事件将被分发到自定义的类加载器中,类加载器收到该事件后重新编译该类文件,生成相应的字节码,然后重新载入。当然为了方便使用,用户不一定要提供一个类的全名,用户可以提供一个包的名字,让后这个包下的所以类将被重新载入,或者更进一步根据正则表达式来匹配。
事实上,最终提供给Java应有的类是由动态代理生成的,在这种机制下,用户不但可以触发类文件被修改的事件,还可以触发其他事件,例如用户可以触发事件让一些类处于调试模式,这个可以用AOP做到,因为我们在创建动态代理的时候可以对其进行增强。当然如果Cache是用AOP来实现的话,用户还可以触发事件告诉Java应用是否进行Cache。而所有这些都是在不用重启应有的情况下做到的。
具体一点,自定义的类加载器可以实现监听者接口,而事件触发器提供方法添加监听器的方法,当相应的事件被触发后所有的注册的监听者将收到改事件信息。^_^,可以考虑在原作者的代码基础上进行更进一步的开发。
分享到:
相关推荐
Java 动态类加载机制研究及应用是基于 Java 虚拟机(JV M)机制的,旨在实现 Java 应用程序中动态加载类文件,而不影响其他功能模块的正常运行。为了实现这个目标,需要对 Java 类加载器的体系结构、动态类加载机制...
文章《Java动态类加载机制应用研究.pdf》通过分析Java类加载器的层次体系结构和动态加载机制的原理,探讨了动态类加载技术在实际中的应用,并以高校网站管理平台的文件发布模块为例进行了具体说明。 首先,我们来看...
动态加载jar包是一种在程序运行时按需引入外部库或者组件的...通过自定义类加载器和反射机制,我们可以实现在运行时加载新的功能,或者根据环境动态调整应用的行为,这对于大型、复杂系统的开发和维护具有重要意义。
总的来说,Java应用程序动态生成PDF文件是通过iText库实现的,这个库提供了丰富的API,使得开发者能够方便地创建具有专业质量的PDF文档。通过深入学习和实践,你将能够利用iText解决各种PDF生成的需求。
在Java应用详解中,我们首先要了解的是Java的基础知识。这包括Java语法、数据类型、控制结构(如if语句、for循环和while循环)、类和对象、封装、继承和多态等核心概念。这些构成了Java编程的基础,对于理解和编写...
Java Desktop Integration Components (JDIC) 是一个强大的库,它提供了与本地操作系统交互的功能,包括加载Web内容到Java应用程序中。 1. **JFrame**:JFrame是Java Swing库中的一个组件,用于构建窗口式应用程序...
Java仿QQ功能实现是一个项目,旨在使用Java编程语言来创建一个类似于腾讯QQ的应用程序,它包含聊天、添加好友和用户注册等核心功能。这个项目主要关注于后端逻辑的实现,以及可能涉及到的数据库交互。以下是一些关键...
Java画图板应用是一种基于Java编程语言开发的图形用户界面(GUI)程序,它提供了类似Windows操作系统内置画图板的功能。这个程序的核心是利用Java的Swing或JavaFX库来构建用户界面,允许用户进行基本的绘图操作,如...
本教程将深入探讨如何在Java中实现一个具有实时进度显示和可关闭功能的加载条。 1. **Swing 或 JavaFX 框架** 在Java中,我们可以利用Swing或JavaFX这两个图形用户界面(GUI)框架来创建加载条。Swing是Java标准库...
在Java编程环境中,实现视频播放功能是一项常见的任务,特别是在开发桌面应用程序或Web应用程序时。Java提供了多种库和API,使得开发者能够集成视频播放功能。在这个“Java实现视频播放功能”的项目中,我们可以深入...
在Java中,你需要创建一个本地方法声明,然后编写C/C++的动态链接库(DLL),并使用`System.loadLibrary()`加载这个库。 ```java public class LockScreen { static { System.loadLibrary("lockscreen"); } ...
在Java应用程序中嵌入脚本模块是一项常见的任务,它允许我们动态执行代码或者在运行时扩展应用程序的功能。这里我们将深入探讨如何使用Groovy脚本语言作为嵌入式脚本模块,以及它在Java开发中的应用。 Groovy是一种...
这个简单的GIS应用展示了如何利用ArcObjects SDK的基本功能,包括创建用户界面、加载地图文档以及显示图层。 首先,我们从标题“arcobjects sdk for java,一个简单的GIS应用”中可以了解到,这是一个基于Java语言...
这一能力使得Java具有了很高的灵活性,尤其是在处理未知类型的对象或在不修改源码的情况下扩展功能时。 1. **Class类**:一切皆为对象,Class类是所有类的实例,它提供了获取类信息的方法,如获取类名、构造器、...
在E-learning平台开发中,利用Java的动态类加载机制和反射机制,可以构建具有微内核架构的系统,实现所谓的"hot swap"功能。hot swap是指在不中断服务的情况下,能够替换或更新正在运行的代码模块。这种机制使得...
类加载器对于理解和优化应用程序的行为至关重要,尤其是涉及到类的动态加载、热部署或者隔离不同环境的类加载需求时。本文将深入探讨类加载器的工作原理,主要类加载器类型,并通过示例展示如何自定义类加载器。 ...
【Java开发的完整小应用程序】是一个使用NetBeans IDE编写的Java应用程序,它具有全面的功能,包括与数据库交互、数据导入导出至Excel以及通过电子邮件发送数据。这个程序展现了Java在桌面应用开发领域的实用性和...
在Java编程中,实现一个具有联想和记忆功能的文本输入控件是一项常见的需求,尤其在构建用户界面时。这个控件结合了文件控件和列表控件,旨在提供动态显示联想内容、记忆历史输入和从不同数据源获取数据的功能。在本...
Java 缓存是一种提高应用...理解缓存的工作原理和如何根据需求选择合适的缓存工具,对于优化Java应用的性能至关重要。通过阅读提供的PPT,你将能更深入地了解这些概念,并学习如何在自己的项目中实施高效的缓存策略。
总的来说,这个项目为STM32开发者提供了一种探索前沿技术的机会,让他们能够在有限的资源条件下,实现类似高级操作系统上的动态加载功能,这对于物联网、智能硬件等领域的发展具有重要意义。通过深入理解和应用这个...