`

Java PlugIn 设计思想

阅读更多
  1. 理论:  PlugIn 插件,设计思想
  2. 假设一个photoshop工程,对照片可以有 很多种风格效果的装饰,有一些装饰效果photoshop开发组可以自己开发并且放在发布版本里面发布。那么大家都可以使用这种效果。但是如果用户想开发 自己的装饰效果怎么办? 难道跑到ps开发组去,把自己的代码给人家,让人家把自己的代码放进人家的ps大工程里面,编译然后发布到下面一个新的发布版本 里面吗,公布给社会嘛?如果人家不同意怎么办? 那自己开发的岂不是白费,可扩展性岂不是太差了? 
  3. 那么在这种情况下,便出现了插件工程的开发概念。ps开发组设计好一种支持效果装饰功能的接口。把这个接口公布给社会,所有个体用户 可以都扩展这个接口,实现里面规定的方法。在ps主程序里面提供了一些使用这些接口方法的代码。然后可以把任何实现了这个接口的类加载到主程序中,并且运 行在接口里面定义好的方法。那么用户自己实现了接口里面定义好的方法,实现好自己设计的装饰效果,就可以被主程序加载,并且对照片进行用户自己的定义的装 饰效果。
  4. 那么这些独立的装饰效果就可以被理解为独立的插件工程,可以都由社会各个独立的团体自己开发,只需要到时候在自己电脑上把自己的插件 工程跟主程序连接起来,就可以使用自己设计的插件了。而在photoshop方面,开发组只需要定义好接口,只需要负责自己的主程序,也不需要把社会上所 有的开发的插件都加到主程序里面全部一次性的编译,并且发布。 这样就极大化的支持了开发的自由性。 
  5. 支持插件开发概念的主要技术则主要是依靠Java的动态类加载功能,以及类的动态绑定技术。 
  6. 代码:  
  7. 通过一个例子也许更好的能解释所有东西。 
  8. 首先建立一个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

    Plugin Framework是一种组件化设计思想的体现,它将应用程序分为两部分:主程序(宿主)和插件。宿主提供了一个运行环境和接口,插件则是在这个环境中实现特定功能的独立模块。这种设计使得插件可以独立开发、独立...

    hadoop-eclipse-plugin-2.6.0.jar

    Hadoop是Apache基金会开源的一款分布式计算框架,它基于Google的MapReduce编程模型和GFS(Google File System)设计思想,旨在解决大数据处理的挑战。MapReduce将大型任务分解为许多小任务并行处理,而HDFS(Hadoop ...

    fmt-maven-plugin:有思想的Maven插件可格式化Java代码

    该格式无法通过设计进行配置。 如果您希望IDE保持相同的格式,则按照上的安装说明,google-java-format还包括IntelliJ和Eclipse IDE的集成。 用法 标准pom.xml 要在每个构建中自动格式化源,请添加到pom.xml中: ...

    hadoop-eclipse-plugin

    Hadoop是Apache软件基金会的一个开源分布式计算框架,它基于Google的MapReduce编程模型和GFS(Google File System)设计思想。Hadoop的核心包括HDFS(Hadoop Distributed File System)和MapReduce,旨在处理和存储...

    PluginTest

    总的来说,"PluginTest"项目揭示了Android插件化开发的基本思路和关键技术,涉及到DexClassLoader和动态加载的使用,这对于希望深入理解Android系统和提高应用开发能力的开发者来说,是非常有价值的实践案例。...

    java初学者必看

    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 ...

    gretty-plugin-commons-0.0.18.zip

    开发者可以通过阅读源码了解其设计思路和实现细节,学习如何将Guice应用于实际项目中。构建脚本(如Gradle或Maven)会指示如何编译、测试和打包项目,这对于理解项目构建流程和环境配置至关重要。 除此之外,`...

    hadoop-eclipse-plugin-2.6.5和2.7.1

    1. **集成开发环境**:Eclipse是一种广泛使用的Java开发工具,通过安装`hadoop-eclipse-plugin`插件,开发者可以在熟悉的Eclipse环境中创建、编辑和管理Hadoop项目,无需离开IDE就能进行集群配置和任务提交。...

    syntax-maven-plugin-1.0.2.zip

    【标题】"syntax-maven-plugin-1.0.2.zip" 涉及的主要知识点是 Maven 插件的开发和使用,尤其是 `syntax-maven-...此外,由于项目是开源的,社区成员可以参与开发,改进代码,或者借鉴其设计思路来应用到自己的项目中。

    基于Java 8的学生管理系统实现

    适用人群:适合有一定 Java 基础的开发者,对面向对象思想有一定的了解,希望提高自己的编码实践技能的学习者或者教师。 使用场景及目标:适用于学校或者其他教育机构管理和记录学生基本信息。同时也可供学习者掌握...

    SeimiCrawler(Java 爬虫框架) v1.3.0.zip

    设计思想上SeimiCrawler受Python的爬虫框架Scrapy启发,同时融合了Java语言本身特点与Spring的特性,并希望在国内更方便且普遍的使用更有效率的XPath解析HTML,所以SeimiCrawler默认的HTML解析器是JsoupXpath(独立...

    Java RCP企业应用快速开发框架

    Java RCP的核心思想是组件化和模块化,这使得应用程序的各个部分可以独立开发、测试和维护,提高了软件的可扩展性和可维护性。 在"Java RCP企业应用快速开发框架"中,开发者可以利用预定义的UI部件和强大的事件处理...

    uml2 plugin for eclipse

    通过熟练掌握这一工具,开发者可以更好地理解和表达软件设计思想,从而优化软件架构,提升团队协作效率。在实际开发过程中,不断探索和熟练运用UML2插件的各种功能,无疑将对提升软件项目的成功概率大有裨益。

    eclipse plugin

    Eclipse 是一个开放源码的平台,其核心设计思想是模块化,这使得开发插件变得非常灵活。 1. **基础概念** - **Plug-in**:Eclipse 的基本构建单元,它提供了功能和服务,可以通过扩展点与其他插件交互。 - **...

    plugin管理初稿

    本文将深入探讨"plugin管理初稿"这一主题,主要基于提供的`PluginMain.java`文件,结合"源码"和"工具"这两个标签,我们将围绕插件的加载、生命周期管理和API接口设计等方面展开讨论。 首先,`PluginMain.java`通常...

    Generic Plugin Engine (Java)-开源

    1. `src`:源代码目录,包含了插件引擎的主要实现,开发者可以通过阅读这些源代码了解其工作原理和设计思路。 2. `lib`:库文件目录,存放项目运行所需的依赖库,这些库可能包含了Java标准库或其他第三方库。 3. `...

    JAVA Web数据爬虫项目源代码

    7. **模块化设计**:项目包含了`spiderman-core`、`spiderman-sample`、`spiderman-web`、`spiderman-webapp`和`spiderman-plugin`等模块,这体现了模块化的设计思想,有助于代码组织和复用,也便于团队协作和代码...

    SimplePluginFramework:用于Java-jar-archives的简单插件框架

    尽管名称中带有“简单”二字,但其背后蕴含的设计思想和实现技巧却并不简单,它在提升软件灵活性的同时,也降低了维护复杂度,是Java开发中的实用工具。通过深入理解和运用SimplePluginFramework,开发者可以更好地...

    java 拦截器例子

    这种设计模式遵循AOP(面向切面编程)的思想,使得业务代码更加专注,同时也易于维护和扩展。 在Java中,拦截器通常通过实现特定接口或者使用注解来定义。例如,Spring AOP中的`MethodInterceptor`接口和`@Around`...

    Java上机文档

    其中,**JDT** (Java Development Tools) 是Java开发工具,而 **PDE** (Plugin Development Environment) 是插件设计环境,用于设计自定义插件。这种基于插件的设计方式使得MyEclipse受到众多开发者的欢迎。 ...

Global site tag (gtag.js) - Google Analytics