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

摘要:
插件)抛出格式不正确的URLException{init(Plugins);Plugins)抛出格式错误的URLException{int size=Plugins.size();URL[]urls=newURL[size];for(int i=0;StringfilePath=plugin.getJar());获取每个插件的特定对象类<
 
 

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

背景:

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

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

实现 直接上代码

/**
 * 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

免责声明:文章转载自《java插件化编程(动态加载)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Oracle里的整型与null问题代码在线编译器(下)- 用户代码安全检测下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Zabbix+Grafana 展示示例1

Zabbix+Grafana 展示示例 Grafana是一个跨平台的开源度量分析和可是化的工具,可以通过该将采集的数据查询然后可视化的展示,并及时通知. 1. Grafana 特性 1. 展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图,折线图,图表等多种展示方式. 2. 数据源: Grap...

python+selenium自动化的准备 1:安装浏览器(火狐)及浏览器插件firebug与firepath、selenium IDE

此处使用火狐35.01版本 1、双击安装文件,如下图:选择下一步 2、选择自定义安装(若选标准安装:会默认安装一些服务,浏览会自动升级,然后导致无法驱动浏览器),下一步 3、安装路径无所谓,下一步 4、去掉安装维护服务的√,下一步 5、下一步,下一步,安装,完成即可(安装火狐时主要的是不让其自动更新即可)  6、安装完成后,打开浏览器,选择右上角三...

将eclipse java程序打包成jar的总结(包括工程中没有引用外部jar包和有引用外部jar包两种情况)

一.当eclispe java工程中没有引用外部jar包时: 选中工程---->右键,Export...--->Java--->JAR file--->next-->填写jar file的路径及名称-->next-->next---> 填写main class--->finish,然后就在相应的目录下得...

MybatisPlus学习笔记7:插件的配置

MP提供了很多好用的插件,而且配置简单,使用方便。接下来一起看看MP的插件如何使用。 1、分页插件: 之前就有说到,BaseMapper的selectPage方法和AR提供的selectPage方法都不是物理分页,需要配置分页插件后才是物理分页,那么现在就来看看如何配置这个插件。 在sqlSessionFactory这个bean中,通过配置插件,接下来的所...

【xcode插件介绍】Alcatraz ----The package manager for Xcode

      对于许多iOS开发者而言,Alcatraz并不陌生,甚至是相当的喜闻乐见。Alcatraz是一款开源的Xcode包管理器,由Marin Usalj、Delisa Mason和Jurre Stender共同开发,其用途很类似于管理利器CocoaPods。Alcatraz可以帮助开发者集中管理Xcode插件,让开发者无需手动拷贝文件,即可发现和安装...

腾讯云大数据套件Hermes-MR索引插件使用总结

版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/121 来源:腾云阁 https://www.qcloud.com/community Hermes是多维分析利器,使用步骤分为索引创建和数据分发两个步骤。 Hermes目前尚未集成到TBDS套件(3.0版本)中且...