java 控件开发_Java插件化开发

这篇博客介绍了如何在Java程序中实现动态加载Jar文件作为插件,以实现插件化功能。作者创建了一个接口PluginInitializer,并通过URLClassLoader加载Jar文件中的类。在加载过程中,遇到的主要挑战是如何确定主类,作者提到了两种方法:从配置JSON中获取主类或通过自定义注解查找。最后,作者提出寻找指定注解的方式来查找主类,简化了这一过程。
摘要由CSDN通过智能技术生成

在java程序开发过程中. 可能需要加载插件的功能. 所以要动态加载Jar文件来实现插件的加载.

我这边用了Kotlin

一. 创建接口

interface PluginInitializer {

fun onInitialize()//插件初始化

}

二. 加载插件

加载的插件可能会抛出什么异常所以要用try

private val file = File("plugins")

private val plugins: ArrayList = ArrayList()

init {

try {

if (file.listFiles().isNotEmpty()) {

for (f in file.listFiles()) {

if (f.name.endsWith(".jar") {//判断文件后缀是否为.jar

val u = URLClassLoader(arrayOf(f.toURL()), Thread.currentThread().contextClassLoader)//加载Jar

plugins.add(u.loadClass("cn.enaium.plugin.Test").newInstance() as PluginInitializer)//加载主类

}

}

}

if (plugins.isNotEmpty()) {

for (p in plugins) {

p.onInitialize()//初始化插件

}

}

} catch (e: Exception) {

}

}

三. 写插件

public class Test implements PluginInitializer {

@Override

public void onInitialize() {

System.out.println("HELLO WORLD!");

}

}

导入Jar然后放入插件目录就可以加载了.

这个主类是固定的 如何把他改为随意的呢?

我们可以在在每一个插件的文件里面都指定一个配置的json里面 然后加载Jar的时候可以用getResourceAsStream来获取中的配置

比如 获取配置中的mainClass就可以了

{

"mainClass": "cn.enaium.plugin.Test"

}

还可以通过注解来查找主类 只要自定义一个注解比如@Plugin 然后遍历Jar文件中全部类中也没用这个 注解就可以找出这个类

这么麻烦有没有更简单的方法呢?

我写了一个加载插件的框架 就是通过寻找指定注解来 查找主类的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值