专栏首页何白白开发记录动态加载class,卸载class

动态加载class,卸载class

动态加载class,卸载class

从指定位置的jar中加载class,和卸载class

第一种
        URL url = new File("/文件路径/entityMaker.jar").toURI().toURL();
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        URLClassLoader classLoader = new URLClassLoader(
                new URL[]{url},
                systemClassLoader
        );

        //加载class

        //不能使用Class.forName("com.hebaibai.entitymaker.util.SqlUtils")加载Class
        Class sqlUtils = classLoader.loadClass("com.hebaibai.entitymaker.util.SqlUtils");
        final Object instance = sqlUtils.newInstance();
        System.out.println(instance.getClass());

        //卸载类
        Method close = URLClassLoader.class.getDeclaredMethod("close");
        close.invoke(classLoader);
        
        //已经加载过得没法卸载
        sqlUtils = classLoader.loadClass("com.hebaibai.entitymaker.util.FileUtils");
        instance = sqlUtils.newInstance();
        System.out.println(instance.getClass());
第二种
        URL url = new File("/home/hjx/Desktop/entityMaker/entityMaker.jar").toURI().toURL();
        URLClassLoader classLoader = (URLClassLoader)ClassLoader.getSystemClassLoader();
        Method addURL = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
        if (!addURL.isAccessible()) {
            addURL.setAccessible(true);
        }
        addURL.invoke(classLoader, url);
        addURL.setAccessible(addURL.isAccessible());
        //可以使用Class.forName("com.hebaibai.entitymaker.util.SqlUtils")加载Class
        Class<?> aClass = Class.forName("com.hebaibai.entitymaker.util.SqlUtils");
        Object instance = aClass.newInstance();
        System.out.println(instance.getClass());

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手写一个orm框架-2

    ​ 想要实现一个orm的功能,我觉得就是要将class和数据库中的表创建映射关系。把class的名称和表的名称,class属性名称和表的字段名称,属性类型与表的...

    何白白
  • 手写一个orm框架-3

    上一篇我们完成了class到表映射关系的建立,但是这个并不能被代码正确处理,我们还需要让程序能够正确的识别这些映射关系。

    何白白
  • 用shell写ssh快速链接工具-2.0

    看起来十分不好看。后来在网上看到shell中有一个whiptail工具可以制作各种命令行里的工具,于是就搜索了一下教程,然后就将之前的ssh工具重新写了一下。

    何白白
  • 编写优雅的 commit message 并自动生成 changelog

    http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html

    木子星兮
  • Spring Boot、Dubbo项目Mock测试踩坑与总结

    本文是对Spring Boot、Dubbo项目进行Mock测试的总结与踩坑实录。 搜索了一圈,居然没发现类似的文章,莫非用Dubbo的朋友们都不Mock测试,或...

    用户1516716
  • html --- bootstrap 框架 (栅格系统布局)

    小蔚
  • vue项目小点(一)

    遍历一个list列表,添加touchstart和touchend事件,并添加删除按钮。如果滑动就添加move类样式,向左滑动60px。

    生南星
  • Teradata面向大中华区推出Think Big业务,融合开源提供大数据咨询服务

    近日,大数据分析服务供应商Teradata天睿公司举行媒体沟通会宣布,旗下Think Big公司正式进军大中华区市场,面向客户提供开源数据分析的咨询服务,融合优...

    CSDN技术头条
  • 6种高质量外链的内容类型推荐

    做网站SEO项目的运营人员,为得到高质量的外链往往会费尽心思。而高质量外链往往会依托于优良的内容,项目的类型不同,需要的内容承载也不同。如果内容比较单一,那么指...

    安邦运维ruangseo
  • 6种高质量外链的内容类型推荐

    做网站SEO项目的运营人员,为得到高质量的外链往往会费尽心思。而高质量外链往往会依托于优良的内容,项目的类型不同,需要的内容承载也不同。如果内容比较单一,那么指...

    安邦运维ruangseo

扫码关注云+社区

领取腾讯云代金券