Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java插件化编程(动态加载)

java插件化编程(动态加载)

作者头像
shengjk1
发布于 2025-05-16 00:32:11
发布于 2025-05-16 00:32:11
5200
代码可运行
举报
文章被收录于专栏:码字搬砖码字搬砖
运行总次数:0
代码可运行

对于java程序员来说,插件化是一件很酷的功能,小二有幸在工作中实现了此功能。

背景:

需要将mysql的数据通过canal同步至kafka/mysql/hdfs等

实现 直接上代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created by shengjk1 on 2017/12/11
 */
public class PluginManager {
    private final static Logger logger = LoggerFactory.getLogger(SendMessageFactory.class);

    private URLClassLoader urlClassLoader;

    public PluginManager(List<Plugin> plugins) throws MalformedURLException {
        init(plugins);
    }
    //将所有插件动态加载至JVM中
    private void init(List<Plugin> plugins) throws MalformedURLException {
        int size = plugins.size();
        URL[] urls = new URL[size];
        for (int i = 0; i < size; i++) {
            Plugin plugin = plugins.get(i);
            String filePath = plugin.getJar();
            urls[i] = new URL("file:" + filePath);
        }
        urlClassLoader = new URLClassLoader(urls);
    }

    public PluginService getInstance(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        // 插件实例化对象,得到每一个插件具体的对象
        Class<?> clazz = urlClassLoader.loadClass(className);
        Object instance = clazz.newInstance();
        return (PluginService) instance;
    }
}

然后就可以进行插件的调用了。 有一点需要注意,那就是效率。反射真的降低效率吗?请移步

http://blog.csdn.net/jsjsjs1789/article/details/78719605

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
jar包太多如何动态加载
编程思维
2023/08/17
3760
jar包太多如何动态加载
Spring Boot 插件化开发模式,真香!
实现服务模块之间解耦的方式有很多,但是插件来说,其解耦的程度似乎更高,而且更灵活,可定制化、个性化更好。
码农编程进阶笔记
2024/12/20
2450
Spring Boot 插件化开发模式,真香!
Android的动态加载插件
我们都知道要获Res下的文件,需要用Resource对象,但是apk是未安装的,宿主并没有对应的resId,因此获取资源需要进行反编译,反编译需要对应的插件的包名,就是反编译R资源。 贴代码,举个例子: 插件管理器类
包子388321
2020/06/16
2K0
Spring Boot 动态加载 jar 包,动态配置太强了
目前数据治理服务中有众多治理任务,当其中任一治理任务有改动需要升级或新增一个治理任务时,都需要将数据治理服务重启,会影响其他治理任务的正常运行。
民工哥
2024/04/19
9190
Spring Boot 动态加载 jar 包,动态配置太强了
Java虚拟机--自定义类加载器
如何定义一个类加载器 前面,我们介绍了类加载器的原理,以及类加载的源码。 本篇,我们结合前面所说的内容,来自定义一个类加载器,以及使用自定义的类加载来完成类加载操作。 在展示代码之前,我们来探讨一个问题,为什么要自定义类加载? 什么场景下需要我们来自定义类加载器加载我们所需要的类? (1)被加密的.class文件,为了安全保证你.class文件进行了加密处理,在程序运行的过程中,你需要解密后再进行操作。此时,就需要自定义一个类加载器来完成.class文件的解密操作,解密完成后再进行类加载; (2).clas
贾博岩
2018/06/13
4740
Activity插件化解决方案
2.最简单的插件化方案就是在宿主的androidmanifest.xml中申明插件中的四大组件
用户3112896
2019/09/26
5970
插件化框架android-pluginmgr全解析
阅读须知:阅读本文的童鞋最好是有过插件化框架使用经历或者对插件化框架有过了解的。前方高能,大牛绕道。
俞其荣
2022/07/28
1.3K0
插件化框架android-pluginmgr全解析
说说Maven框架和插件的契约
Maven框架就像现在公司内的各种平台方,规定一些契约,然后想办法拉动业务方,一起在这个平台上去做生态共建。Maven也是这样,其实它就是一个插件执行的框架,Maven刚开始肯定不知道会有谁去贡献插件,插件如果写得五花八门的话,那对于平台方来说,可能就是一个灾难,所以,平台方就要负责定标准,要在我平台上写插件,必须怎么怎么样。
低级知识传播者
2021/09/23
3320
说说Maven框架和插件的契约
【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources 资源 )
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources 资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )
韩曙亮
2023/03/29
9940
【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources 资源 )
【Android 插件化】“ 插桩式 “ 插件化框架 ( 代理 Activity 组件开发 )
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources 资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 )
韩曙亮
2023/03/29
7400
JAVA类加载机制全解析
当程序使用某个类时,如果该类还没被初始化,加载到内存中,则系统会通过加载、连接、初始化三个过程来对该类进行初始化。该过程就被称为类的初始化
迹_Jason
2019/05/28
5230
公司内部邮箱服务器发送邮件 java版
由于需要给合作方以压缩包的形式每天返回数据,基于我们自己写的分布式程序,而月末通过返回的数据,来与合作方进行对账,所以每天数据返回的成败就至关重要了,但又懒得每天去查看日志,刚好借助一下公司内部的邮件服务器。
shengjk1
2018/10/24
2.2K0
腾讯企业邮发送邮件 java版
背景: 由于spark streaming程序需要保证 1*24 小时,不间断运行的,为了第一时间知道程序是否出错,所以采用了出错发送邮件这一策略,而公司恰恰又使用了腾讯企业邮,网上也有一些关于腾讯企业邮的例子,但不那么尽人意,s所以特地在此整理一下!
shengjk1
2018/10/24
1.8K0
【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 )
韩曙亮
2023/03/29
1.5K0
【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
Android插件化技术之旅 1 开篇 - 实现启动插件与调用插件中的Activity和Service
Android技术如今已很成熟了,组件化、插件化、热修复等等框架层出不穷,如果只停留在单纯的会用框架上,技术永远得不到成长,只有懂得其原理,能够婉婉道来,能够自己手动写出,技术才会得到成长,与其焦虑未来,不如把握现在。本篇将手写教大家写出插件化框架,插件化技术是Android高级工程师必备的技术之一,懂其思想,知其原理。本篇专题将由10篇文章来详细的讲解插件化技术,深耕一个技术领域,才能懂得如何更广阔的横向发展。
用户3045442
2019/01/09
1.3K0
015. 类加载机制
1. 运行时数据区 JVM 用来存储加载的类信息、常量、静态变量、编译后的代码等数据。 虚拟机规范中这是一个逻辑区划。具体实现根据不同虚拟机来实现。 如:oracle 的 HotSpot 在 java
山海散人
2021/03/03
2270
015. 类加载机制
【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 )
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 )
韩曙亮
2023/03/29
5760
【Android 插件化】Hook 插件化框架 ( hook 插件化原理 | 插件包管理 )
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 )
韩曙亮
2023/03/29
4.3K0
【Android 插件化】Hook 插件化框架 ( hook 插件化原理 | 插件包管理 )
自己动手写Android插件化框架
本文旨在通过两个实例直观的说明插件的实现原理以加深对插件内开发的理解,因此不会深入探讨背景和原理,代码也尽量专注于核心逻辑。
达文西
2018/10/06
1.6K0
Android插件化原理解析
在解决插件中组件的生命周期,通常的做法是通过 Hook相应的系统对象,实现欺上瞒下,后面将通过Activity的插件化来进行讲解。
用户1205080
2019/02/26
9070
推荐阅读
相关推荐
jar包太多如何动态加载
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验