`
gelongmei
  • 浏览: 211696 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

自定义classloader实现JAVA热替换

 
阅读更多
自定义classloader实现JAVA热替换

public class HotClassLoader extends ClassLoader { 
 
    public HotClassLoader() { 
        super(ClassLoader.getSystemClassLoader()); 
    } 
 
    private File objFile; 
 
    public File getObjFile() { 
        return objFile; 
    } 
 
    public void setObjFile(File objFile) { 
        this.objFile = objFile; 
    } 
 
    @Override 
    protected Class<?> findClass(String name) throws ClassNotFoundException { 
        //这个classLoader的主要方法 
        System.out.println("findClassfindClassfindClassfindClass"); 
        Class clazz = null; 
        try { 
            byte[] data = getClassFileBytes(getObjFile()); 
            clazz = defineClass(name, data, 0, data.length);//这个方法非常重要 
            if (null == clazz) {//如果在这个类加载器中都不能找到这个类的话,就真的找不到了 
 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        return clazz; 
 
    } 
 
    /**
     * 把CLASS文件转成BYTE
     *
     * @throws Exception
     */ 
    private byte[] getClassFileBytes(File file) throws Exception { 
        //采用NIO读取 
        FileInputStream fis = new FileInputStream(file); 
        FileChannel fileC = fis.getChannel(); 
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        WritableByteChannel outC = Channels.newChannel(baos); 
        ByteBuffer buffer = ByteBuffer.allocateDirect(1024); 
        while (true) { 
            int i = fileC.read(buffer); 
            if (i == 0 || i == -1) { 
                break; 
            } 
            buffer.flip(); 
            outC.write(buffer); 
            buffer.clear(); 
        } 
        fis.close(); 
        return baos.toByteArray(); 
    } 
 
分享到:
评论

相关推荐

    Java类热替换(热部署)源码

    总之,Java类热替换是一种强大的开发和调试工具,通过自定义ClassLoader和巧妙利用JVM特性,我们可以极大地提升开发效率。这个压缩包中的源码可能就是展示如何实现这个功能的一个实例,你可以仔细研究这些代码,加深...

    Java ClassLoader学习总结

    通过自定义的 ClassLoader,我们可以实现类的热替换,例如,在 Web 服务器中,我们可以使用自定义的 ClassLoader 来实现热替换,以提高 Web 服务器的性能。 在 ClassLoader 中,还有一个重要的方法是 ...

    使用自定义ClassLoader解决反序列化serialVesionUID不一致问题 _ 回忆飘如雪1

    自定义`ClassLoader`的设计和实现是一个高级话题,需要深入理解Java的类加载机制。通过这种方式,可以有效地解决在反序列化过程中因`serialVersionUID`不一致导致的问题,同时减少潜在的副作用,提升程序的稳定性和...

    classloader

    3. 整合自定义ClassLoader:了解如何将自定义的ClassLoader集成到Java应用程序中,替换或扩展默认的加载行为。 4. 考虑Java 2版本的兼容性:学习如何修改你的ClassLoader以适应Java 2及以上版本的特性,比如支持...

    关于java热部署知识.doc

    虽然标准的Java虚拟机(JVM)并不直接支持类的动态加载和替换,但是通过自定义ClassLoader和特定的工具,可以实现热部署。 首先,Java类的加载是由ClassLoader负责的。Java中有三层类加载器:Bootstrap ClassLoader...

    Java SE: ClassLoader in depth

    - 按需加载类,实现热部署。 热部署是指在不重启应用服务器的情况下,能够加载新的类或者替换掉旧的类。对于需要频繁更新的应用,热部署功能非常实用。热部署技术可以应用于Web应用服务器、插件系统等领域。 当...

    了解Java ClassLoader

    - 自定义ClassLoader在插件系统、热部署、模块化系统等领域有广泛应用。 5. **类的生命周期** - 加载:通过ClassLoader找到对应的.class文件。 - 链接:验证、准备、解析三个步骤。 - 初始化:执行类的静态初始...

    java classloader讲义-淘宝网

    1. **热更新实现**:通过自定义ClassLoader,可以在不重启服务器的情况下,加载新的类文件替换旧的类文件。 2. **多租户隔离**:淘宝网存在大量的商户和服务,每个服务都可能有自己的类加载器,这样可以有效地隔离...

    Android 使用classloader原理进行热更新

    热更新通常依赖于类加载器(Classloader)的工作原理来实现,本篇文章将深入探讨如何利用Android的类加载器实现热更新的机制。 首先,我们需要理解什么是类加载器。在Java和Android中,类加载器是负责查找、加载和...

    ClassLoader的 一些测试

    3. 动态加载:创建自己的类加载器,尝试动态加载新的类,实现代码的热替换。 4. 类隔离:通过自定义ClassLoader实现不同模块之间的类隔离,避免类冲突。 总的来说,深入理解ClassLoader的工作原理对于优化程序性能...

    springboot+java类热加载

    我们可以通过自定义类加载器来实现热加载。例如,`MemoryClassLoader.java`可能就是一个自定义类加载器的实现,它可以在内存中动态加载或更新类。 **JarinJAR**是一种打包技术,它可以将多个JAR文件打包成一个大的...

    Java基于自定义类加载器实现热部署过程解析

    为了实现热部署,需要使用自定义的ClassLoader替换系统的加载器,创建一个新的ClassLoader,再用它加载Class,得到的Class对象就是新的(因为不是同一个类加载器),再用该Class对象创建一个实例,从而实现动态更新...

    ClassLoader总结

    在热部署场景下,可以通过替换ClassLoader来实现不重启JVM就能更新代码;另外,对于加密的类文件,可以编写特定的ClassLoader解密后再加载。 了解ClassLoader的工作机制对于深入理解Java应用程序的运行过程至关重要...

    深入Java虚拟机_ClassLoader

    3. 自定义ClassLoader: 开发者可以继承java.lang.ClassLoader类,创建自己的类加载器,实现特定的类查找和加载逻辑。这常用于动态加载插件、实现模块化系统或加载加密的类文件。 4. 双重检查锁定与类加载: 在多...

    探索JVM底层奥秘ClassLoader源码分析与案例讲解

    例如,我们可以创建一个从数据库加载类的ClassLoader,或者实现热更新功能,允许在运行时替换已加载的类。自定义ClassLoader需要重写`loadClass()`方法,并根据需求实现类的查找和加载。 总的来说,深入理解...

    自定义Java类加载器

    - **热部署**:在开发环境中,可以实现快速替换和更新类,而无需重启应用程序。 - **模块化系统**:不同模块使用不同的类加载器,隔离不同模块间的类,避免冲突。 - **安全沙箱**:每个加载器都有自己的命名空间,...

    ClassLoader

    1. **安全性**: 如果没有双亲委托机制,那么自定义的类加载器就可以轻易地替换掉核心类库中的类,这将带来极大的安全隐患。 2. **避免重复加载**: 由于每个类加载器都有一个缓存机制,因此在同一个类加载器环境下...

    java classLoader 的全面讲解

    三、自定义ClassLoader 1. 继承ClassLoader:为了实现特定的加载策略,如从网络加载类、从加密数据加载类等,可以继承ClassLoader并重写`findClass()`方法。 2. URLClassLoader:Java提供了一个内置的...

    使用classloader动态加载Class

    1. **自定义ClassLoader**:Java允许我们创建自定义的ClassLoader,这通常用于实现动态加载类的需求。自定义ClassLoader需要重写`findClass()`或`loadClass()`方法。`loadClass()`方法是类加载的入口,它会调用`find...

Global site tag (gtag.js) - Google Analytics