入口类:
public static void main(String[] args) {
while (true) {
try {
FileClassLoader a = new FileClassLoader("E:\\workspace-nfjd\\testrealpath\\WebContent\\WEB-INF\\classes\\");
Object foo = a.findClass("Foo").newInstance();
Method m = foo.getClass().getMethod("sayHello", new Class[] {});
m.invoke(foo, new Object[] {});
} catch (Exception ex) {
ex.printStackTrace();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
自己的类加载器:
public class FileClassLoader extends ClassLoader {
/**
* @param drive
*/
public FileClassLoader(String drive) {
super();
this.drive = drive;
}
public String drive = "E:\\workspace-nfjd\\classLoader\\bin\\";
public String fileType = ".class";
public Class findClass(String name) {
byte[] data = loadClassData(name);
return defineClass(name, data, 0, data.length);
}
public byte[] loadClassData(String name) {
FileInputStream fis = null;
byte[] data = null;
try {
fis = new FileInputStream(new File(drive + name + fileType));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
while ((ch = fis.read()) != -1) {
baos.write(ch);
}
data = baos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
/**
* @param string
*/
public void setPath(String string) {
this.drive=string;
}
}
测试类:
public class Foo {
{
System.out.println("212121s111");
}
public void sayHello() {
System.out.println("hhh222");
}
}
相当于是新建了个类加载器, 内存会浪费点,不过原先的加载器会被GC掉。
分享到:
相关推荐
在Java编程中,动态编译代码并热加载类是一项重要的技术,它允许程序在运行时修改或添加新的类,而无需重启应用。这种能力对于快速迭代开发、调试和性能优化非常有用。本主题将深入探讨Java中的动态编译与热加载机制...
**热加载(Hot Loading)**是开发过程中的一个重要功能,它允许开发者在不重启应用的情况下更新代码,提高开发效率。在Java世界中,这通常通过重新加载或替换已加载的类来实现。在SpringBoot项目中,热加载技术可以...
SpringLoaded是Spring Boot热加载的核心组件,它允许我们在代码修改后无需重启应用即可看到更改的效果,大大提升了开发体验。 SpringLoaded是Spring框架的动态代理加载器,它实现了Java的类加载机制,可以在应用...
在编程世界中,热加载(Hot Reloading)是一种强大的技术,它允许开发者在运行时修改代码并立即看到更改的效果,而无需重启应用程序。对于C和C++这样的静态类型语言,实现热加载通常比动态语言更为复杂,因为它们在...
要实现类的热加载,通常需要先动态编译修改后的源代码,生成新的字节码文件,然后使用自定义类加载器加载这个新版本的类。Java的`javac`工具可用于编译源代码,`ASM`或`Javassist`库可以方便地操作字节码。 5. ...
在Spring Boot应用中,MyBatis作为持久层框架,通常会使用XML文件来定义SQL映射。然而,当开发过程中需要频繁修改这些XML文件时,每次改动都需要...在开发阶段使用热加载,到了生产环境,确保代码无误后再禁用该功能。
JAVA热加载技术是一种提高开发效率的重要工具,它允许开发者在不重启应用服务器的情况下,实时更新代码并看到效果。Eclipse作为流行的Java集成开发环境(IDE),提供了多种插件支持这一功能,使得程序员能够快速测试...
热加载技术允许开发者在不重启Tomcat的情况下,实时查看代码更改的结果,从而极大地提升了开发和调试的速度。这种技术的核心在于动态类加载机制,它使得Tomcat能够检测到应用中Java类的变化,并自动重新加载这些类,...
Java热加载Class文件是开发者在调试和优化代码时非常实用的一种技术,它允许开发者在不重启JVM的情况下更新和替换已加载的类,极大地提高了开发效率。本文将深入探讨Java热加载Class文件的相关知识点。 首先,理解...
7. **自定义热加载实现**: 对于不想使用第三方工具的情况,开发者可以自行编写代码来实现类的热加载,这通常涉及监控文件系统变更、解析Class文件以及与JVM交互等步骤,难度相对较大。 8. **性能和稳定性**:虽然热...
在Java开发环境中,热加载(Hot Deployment)是一种提高开发效率的技术,它允许开发者在不重启应用服务器的情况下更新类文件,从而快速验证代码更改的效果。"class文件热加载,上传class文件实现热加载"这个主题主要...
5. 使用示例:文章可能会给出具体的代码示例,演示如何在实际项目中使用热加载技术。这可能包括配置步骤、测试用例和可能出现的问题及其解决方案。 6. 性能影响:虽然热加载带来了便利,但也会对性能产生一定影响,...
在Spring Boot应用中集成MyBatis作为持久层框架时,我们常常希望在开发过程中能够实现XML映射文件的热加载,以便在修改了SQL语句后无需重启应用就能看到效果。这种热加载功能能显著提高开发效率。下面将详细介绍如何...
热加载技术的核心在于能够监听到代码的变化,并在代码发生变化后自动重启应用或者部分重启应用,使得新的代码变更能够在不中断服务的情况下立即生效。Spring Boot 提供的 `spring-boot-devtools` 是一个非常实用的...
总的来说,JavaRebel作为一款优秀的热加载工具,显著提升了Java开发的效率,让开发者能够更快地迭代和测试代码,从而加速整个软件开发周期。对于任何需要频繁调整代码的项目,尤其是Web应用,JavaRebel都是一个值得...
在这个场景下,`代码热加载`、`webpack打包`、`weex原生调用`、`vue组件封装`以及`weex内置组件使用`是关键知识点。 1. **代码热加载**: 代码热加载是一种提高开发效率的技术,它允许开发者在修改代码后无需手动...
share-code-loaded关于代码热加载技术: spring-loaded与spring-boot-devtools一.Spring-Loaded1.工作原理基于jdk代理方式,实现JVM的Instrumentation进行premain或agentmain代理加载以及TransformerManager的...
为了解决这个问题,"实现热加载的Chrome扩展"是一个实用的技术方案,它利用JavaScript的特性来实现无需每次修改代码后都重新打包安装插件,而是通过热更新的方式快速查看改动效果。这个技术主要涉及到以下几个核心...
实现对代码的动态更新,只需要上传覆盖原class文件即可在不停止项目的过程中更新代码
CAD二次开发,启动加载界面,并在点击Ribbon按钮时热加载功能DLL,并提供打包的工程框架; 整个思路为启动时运行lsp,lsp操作仅加载一个界面DLL,其中按钮绑定CAD内部任务,或者使用反射绑定到指定的DLL文件; zip放...