java插件开发

假设一个photoshop工程,对照片可以有很多种风格效果的装饰,有一些装饰效果photoshop开发组可以自己开发并且放在发布版本里面发布。那么大家都可以使用这种效果。但是如果用户想开发自己的装饰效果怎么办? 难道跑到ps开发组去,把自己的代码给人家,让人家把自己的代码放进人家的ps大工程里面,编译然后发布到下面一个新的发布版本里面吗,公布给社会嘛?如果人家不同意怎么办? 那自己开发的岂不是白费,可扩展性岂不是太差了?

 

那么在这种情况下,便出现了插件工程的开发概念。ps开发组设计好一种支持效果装饰功能的接口。把这个接口公布给社会,所有个体用户可以都扩展这个接口,实现里面规定的方法。在ps主程序里面提供了一些使用这些接口方法的代码。然后可以把任何实现了这个接口的类加载到主程序中,并且运行在接口里面定义好的方法。那么用户自己实现了接口里面定义好的方法,实现好自己设计的装饰效果,就可以被主程序加载,并且对照片进行用户自己的定义的装饰效果。

 

那么这些独立的装饰效果就可以被理解为独立的插件工程,可以都由社会各个独立的团体自己开发,只需要到时候在自己电脑上把自己的插件工程跟主程序连接起来,就可以使用自己设计的插件了。而在photoshop方面,开发组只需要定义好接口,只需要负责自己的主程序,也不需要把社会上所有的开发的插件都加到主程序里面全部一次性的编译,并且发布。 这样就极大化的支持了开发的自由性。

 

支持插件开发概念的主要技术则主要是依靠Java的动态类加载功能,以及类的动态绑定技术。

 

通过一个例子也许更好的能解释所有东西。

首先建立一个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里面进行设置。如果想进一步了解信息,就可以查找更多的材料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用VS Code开发Java时,有许多插件可以提供支持和增强功能。以下是一些常用的插件: 1. Language Support for Java(TM) by Red Hat:提供Java语言的语法高亮、代码补全、代码导航等功能。 2. Debugger for Java:在VS Code中进行Java代码的调试。 3. Java Test Runner:用于运行和调试Java单元测试。 4. Maven for Java:提供与Maven构建工具的集成,可以方便地进行依赖管理和构建操作。 5. IntelliCode:智能提示代码的插件,可以根据上下文和代码模式提供更准确的代码建议。 6. Lombok Annotations Support for VS Code:支持Lombok库的注解,简化Java代码的编写。 7. Spring Boot Tools:针对Spring Boot框架的工具,提供便捷的开发和调试功能。 8. Redis:用于Redis数据库的连接和管理。 9. XML:用于编辑和查看XML文件的插件。 10. YAML:用于编辑和查看YAML文件的插件。 11. Java P3C Checker:阿里巴巴Java编码规范的插件,可以帮助检查和修复代码中的规范问题。 以上是一些常见的VS Code Java插件,它们可以提供代码编辑、调试、构建和测试等方面的支持,让开发者更高效地进行Java开发。请根据自己的需求选择适合的插件并进行安装和配置。另外,VS Code的配置文件位置通常是在C:\Users\用户名\AppData\Roaming\Code\User\settings.json中。希望这些信息对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值