`

热加载--代码

 
阅读更多

入口类:

	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编程中,动态编译代码并热加载类是一项重要的技术,它允许程序在运行时修改或添加新的类,而无需重启应用。这种能力对于快速迭代开发、调试和性能优化非常有用。本主题将深入探讨Java中的动态编译与热加载机制...

    springboot+java类热加载

    **热加载(Hot Loading)**是开发过程中的一个重要功能,它允许开发者在不重启应用的情况下更新代码,提高开发效率。在Java世界中,这通常通过重新加载或替换已加载的类来实现。在SpringBoot项目中,热加载技术可以...

    Spring boot 热加载 springloaded-1.2.4.RELEASE JAR包

    SpringLoaded是Spring Boot热加载的核心组件,它允许我们在代码修改后无需重启应用即可看到更改的效果,大大提升了开发体验。 SpringLoaded是Spring框架的动态代理加载器,它实现了Java的类加载机制,可以在应用...

    cpp-用于linux和macos的C代码热加载

    在编程世界中,热加载(Hot Reloading)是一种强大的技术,它允许开发者在运行时修改代码并立即看到更改的效果,而无需重启应用程序。对于C和C++这样的静态类型语言,实现热加载通常比动态语言更为复杂,因为它们在...

    Java之——类热加载

    要实现类的热加载,通常需要先动态编译修改后的源代码,生成新的字节码文件,然后使用自定义类加载器加载这个新版本的类。Java的`javac`工具可用于编译源代码,`ASM`或`Javassist`库可以方便地操作字节码。 5. ...

    spring boot中配置mybatis热加载相关文件

    在Spring Boot应用中,MyBatis作为持久层框架,通常会使用XML文件来定义SQL映射。然而,当开发过程中需要频繁修改这些XML文件时,每次改动都需要...在开发阶段使用热加载,到了生产环境,确保代码无误后再禁用该功能。

    JAVA热加载eclipse插件

    JAVA热加载技术是一种提高开发效率的重要工具,它允许开发者在不重启应用服务器的情况下,实时更新代码并看到效果。Eclipse作为流行的Java集成开发环境(IDE),提供了多种插件支持这一功能,使得程序员能够快速测试...

    MyEclipse热加载jar包.zip

    热加载技术允许开发者在不重启Tomcat的情况下,实时查看代码更改的结果,从而极大地提升了开发和调试的速度。这种技术的核心在于动态类加载机制,它使得Tomcat能够检测到应用中Java类的变化,并自动重新加载这些类,...

    java热加载Class文件

    Java热加载Class文件是开发者在调试和优化代码时非常实用的一种技术,它允许开发者在不重启JVM的情况下更新和替换已加载的类,极大地提高了开发效率。本文将深入探讨Java热加载Class文件的相关知识点。 首先,理解...

    java热加载Class文件.zip

    7. **自定义热加载实现**: 对于不想使用第三方工具的情况,开发者可以自行编写代码来实现类的热加载,这通常涉及监控文件系统变更、解析Class文件以及与JVM交互等步骤,难度相对较大。 8. **性能和稳定性**:虽然热...

    class文件热加载,上传class文件实现热加载

    在Java开发环境中,热加载(Hot Deployment)是一种提高开发效率的技术,它允许开发者在不重启应用服务器的情况下更新类文件,从而快速验证代码更改的效果。"class文件热加载,上传class文件实现热加载"这个主题主要...

    热加载类

    5. 使用示例:文章可能会给出具体的代码示例,演示如何在实际项目中使用热加载技术。这可能包括配置步骤、测试用例和可能出现的问题及其解决方案。 6. 性能影响:虽然热加载带来了便利,但也会对性能产生一定影响,...

    spring boot中配置mybatis热加载.zip

    在Spring Boot应用中集成MyBatis作为持久层框架时,我们常常希望在开发过程中能够实现XML映射文件的热加载,以便在修改了SQL语句后无需重启应用就能看到效果。这种热加载功能能显著提高开发效率。下面将详细介绍如何...

    idea热加载.md

    热加载技术的核心在于能够监听到代码的变化,并在代码发生变化后自动重启应用或者部分重启应用,使得新的代码变更能够在不中断服务的情况下立即生效。Spring Boot 提供的 `spring-boot-devtools` 是一个非常实用的...

    javareble 热加载jvm插件

    总的来说,JavaRebel作为一款优秀的热加载工具,显著提升了Java开发的效率,让开发者能够更快地迭代和测试代码,从而加速整个软件开发周期。对于任何需要频繁调整代码的项目,尤其是Web应用,JavaRebel都是一个值得...

    代码热加载webpack打包weex原生调用vue组件封装weex内置组件使用

    在这个场景下,`代码热加载`、`webpack打包`、`weex原生调用`、`vue组件封装`以及`weex内置组件使用`是关键知识点。 1. **代码热加载**: 代码热加载是一种提高开发效率的技术,它允许开发者在修改代码后无需手动...

    share-code-loaded:JVM代码字节热加载

    share-code-loaded关于代码热加载技术: spring-loaded与spring-boot-devtools一.Spring-Loaded1.工作原理基于jdk代理方式,实现JVM的Instrumentation进行premain或agentmain代理加载以及TransformerManager的...

    实现热加载的Chrome扩展

    为了解决这个问题,"实现热加载的Chrome扩展"是一个实用的技术方案,它利用JavaScript的特性来实现无需每次修改代码后都重新打包安装插件,而是通过热更新的方式快速查看改动效果。这个技术主要涉及到以下几个核心...

    java类热加载

    实现对代码的动态更新,只需要上传覆盖原class文件即可在不停止项目的过程中更新代码

    CAD二次开发-界面加载框架-代码模板

    CAD二次开发,启动加载界面,并在点击Ribbon按钮时热加载功能DLL,并提供打包的工程框架; 整个思路为启动时运行lsp,lsp操作仅加载一个界面DLL,其中按钮绑定CAD内部任务,或者使用反射绑定到指定的DLL文件; zip放...

Global site tag (gtag.js) - Google Analytics