实现简单的代码热替换

package com.hotswap;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * Created by huangzhw on 2016/9/8.
 */
public class HotSwapTest {
    public static void main(String[] args) throws Exception{
        while(true){
            HotSwapClassLoader hotSwapClassLoader = new HotSwapClassLoader();
            //所有在M类中所用到的类,都会通过HotSwapClassLoader进行加载
            //加载时先调用loadClass(在LoadClass中定义,默认支持双亲委派),使用父加载器向上加载。
            //只有所有父加载器都加载失败时,才调用findClass加载并生成类!!!
            //由于双亲委派的存在,所以对于自加载的类可以通过反射使用,也可以通过接口使用(接口类会由SystemClassLoader加载),在子类中加载接口时,会返回SystemClassLoader加载的对象。
            Class<?> cls = hotSwapClassLoader.findClass("M");
            Object target = cls.newInstance();
            cls.getDeclaredMethod("prt").invoke(target);
            Thread.sleep(5000);
        }
    }
    private static class HotSwapClassLoader extends ClassLoader{

        @Override
        protected Class<?> findClass(String name) throws ClassNotFoundException {
            File f = new File("D:\\M.class");
            long size = f.length();
            byte[] bs = new byte[(int)size];
            try(FileInputStream fins = new FileInputStream(f)){
                fins.read(bs);
            }catch (IOException ie){
                System.out.println(ie);
            }
            return defineClass(name, bs, 0, (int)size);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值