首先建立一个interface类,然后导出成一个jar包。在主程序和插件程序中都把这个jar当成类库加入。
package printInterface;
public interface MyActionInterface {
public void print();
}
导出jar文件名叫做interface.jar
然后在插件工程里面实现这个接口,并且也导出一个jar包,拷贝到跟主程序main方法类的同一文件夹中,一般class文件都在bin文件夹中
public class MyAction implements printInterface.MyActionInterface {
@Override
public void print() {
System.out.println("Now you have used my Plug-in");
}
}
导出jar包名叫myActionPlug-in.jar
下面是主程序,在其中动态加载了插件工程,如果插件工程能被搜索到,那么就执行插件功能,如果被搜索不到,那么就什么都不执行。
import java.net.URL;
import java.net.URLClassLoader;
public class MyActionMain {
/**
* @param args
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException {
// 首先得到plugin的url(plugin插件拷在跟MyActionMain.class同一个文件夹中默认是bin文件夹中)
URL url = MyActionMain.class.getResource("myActionPlug-in.jar");
// 得到类加载器
URLClassLoader loader = new URLClassLoader(new URL[] { url });
// 得到plugin类的类对象
Class clazz = loader.loadClass("MyAction");
// 如果有这个插件,就进行下面的动作,如果没有这个插件就返回
if (clazz == null) {
return;
}
// 对这个类进行实例化
Object obj = clazz.newInstance();
// 把Object转换成接口类型
printInterface.MyActionInterface mai = (printInterface.MyActionInterface) obj;
// 动态绑定,运行实现了这个接口的类的方法
mai.print();
}
}
注意这里是明确指定了插件所在的位置,要想更灵活的定位插件,或者让主程序在运行的时候自己主动寻找可以加载的插件,并且可以利用这些插件。那么就要在plug.xml里面进行设置。
相关推荐
Plugin Framework是一种组件化设计思想的体现,它将应用程序分为两部分:主程序(宿主)和插件。宿主提供了一个运行环境和接口,插件则是在这个环境中实现特定功能的独立模块。这种设计使得插件可以独立开发、独立...
Hadoop是Apache基金会开源的一款分布式计算框架,它基于Google的MapReduce编程模型和GFS(Google File System)设计思想,旨在解决大数据处理的挑战。MapReduce将大型任务分解为许多小任务并行处理,而HDFS(Hadoop ...
该格式无法通过设计进行配置。 如果您希望IDE保持相同的格式,则按照上的安装说明,google-java-format还包括IntelliJ和Eclipse IDE的集成。 用法 标准pom.xml 要在每个构建中自动格式化源,请添加到pom.xml中: ...
Hadoop是Apache软件基金会的一个开源分布式计算框架,它基于Google的MapReduce编程模型和GFS(Google File System)设计思想。Hadoop的核心包括HDFS(Hadoop Distributed File System)和MapReduce,旨在处理和存储...
总的来说,"PluginTest"项目揭示了Android插件化开发的基本思路和关键技术,涉及到DexClassLoader和动态加载的使用,这对于希望深入理解Android系统和提高应用开发能力的开发者来说,是非常有价值的实践案例。...
16.3.1 JDBC设计思想 16.3.2 JDBC常见接口和类 16.3.3 JDBC数据库连接步骤 16.3.4 加载JDBC驱动程序 16.3.5 获取Connection连接对象 16.4 Java与各种数据库连接 16.5 本章习题 第17章 Java Web应用——JSP ...
开发者可以通过阅读源码了解其设计思路和实现细节,学习如何将Guice应用于实际项目中。构建脚本(如Gradle或Maven)会指示如何编译、测试和打包项目,这对于理解项目构建流程和环境配置至关重要。 除此之外,`...
1. **集成开发环境**:Eclipse是一种广泛使用的Java开发工具,通过安装`hadoop-eclipse-plugin`插件,开发者可以在熟悉的Eclipse环境中创建、编辑和管理Hadoop项目,无需离开IDE就能进行集群配置和任务提交。...
【标题】"syntax-maven-plugin-1.0.2.zip" 涉及的主要知识点是 Maven 插件的开发和使用,尤其是 `syntax-maven-...此外,由于项目是开源的,社区成员可以参与开发,改进代码,或者借鉴其设计思路来应用到自己的项目中。
适用人群:适合有一定 Java 基础的开发者,对面向对象思想有一定的了解,希望提高自己的编码实践技能的学习者或者教师。 使用场景及目标:适用于学校或者其他教育机构管理和记录学生基本信息。同时也可供学习者掌握...
设计思想上SeimiCrawler受Python的爬虫框架Scrapy启发,同时融合了Java语言本身特点与Spring的特性,并希望在国内更方便且普遍的使用更有效率的XPath解析HTML,所以SeimiCrawler默认的HTML解析器是JsoupXpath(独立...
Java RCP的核心思想是组件化和模块化,这使得应用程序的各个部分可以独立开发、测试和维护,提高了软件的可扩展性和可维护性。 在"Java RCP企业应用快速开发框架"中,开发者可以利用预定义的UI部件和强大的事件处理...
通过熟练掌握这一工具,开发者可以更好地理解和表达软件设计思想,从而优化软件架构,提升团队协作效率。在实际开发过程中,不断探索和熟练运用UML2插件的各种功能,无疑将对提升软件项目的成功概率大有裨益。
Eclipse 是一个开放源码的平台,其核心设计思想是模块化,这使得开发插件变得非常灵活。 1. **基础概念** - **Plug-in**:Eclipse 的基本构建单元,它提供了功能和服务,可以通过扩展点与其他插件交互。 - **...
本文将深入探讨"plugin管理初稿"这一主题,主要基于提供的`PluginMain.java`文件,结合"源码"和"工具"这两个标签,我们将围绕插件的加载、生命周期管理和API接口设计等方面展开讨论。 首先,`PluginMain.java`通常...
1. `src`:源代码目录,包含了插件引擎的主要实现,开发者可以通过阅读这些源代码了解其工作原理和设计思路。 2. `lib`:库文件目录,存放项目运行所需的依赖库,这些库可能包含了Java标准库或其他第三方库。 3. `...
7. **模块化设计**:项目包含了`spiderman-core`、`spiderman-sample`、`spiderman-web`、`spiderman-webapp`和`spiderman-plugin`等模块,这体现了模块化的设计思想,有助于代码组织和复用,也便于团队协作和代码...
尽管名称中带有“简单”二字,但其背后蕴含的设计思想和实现技巧却并不简单,它在提升软件灵活性的同时,也降低了维护复杂度,是Java开发中的实用工具。通过深入理解和运用SimplePluginFramework,开发者可以更好地...
这种设计模式遵循AOP(面向切面编程)的思想,使得业务代码更加专注,同时也易于维护和扩展。 在Java中,拦截器通常通过实现特定接口或者使用注解来定义。例如,Spring AOP中的`MethodInterceptor`接口和`@Around`...
其中,**JDT** (Java Development Tools) 是Java开发工具,而 **PDE** (Plugin Development Environment) 是插件设计环境,用于设计自定义插件。这种基于插件的设计方式使得MyEclipse受到众多开发者的欢迎。 ...