刘广昱
骑士
骑士
  • UID363
  • 粉丝1
  • 关注1
  • 发帖数31
  • 社区居民
阅读:11136回复:12

自定义扩展点

楼主#
更多 发布于:2019-03-18 11:29
  扩展(Extension)是Eclipse中一个关键的机制,plug-in利用扩展向Eclipse平台添加新功能。但是扩展不能随意地创建,必须按照扩展点(extension point)定义的规范进行明确的声明,Eclipse才能认出这些扩展。我们不仅可以使用Eclipse提供的众多现成的扩展点,而且还可以定义新的扩展点,并在该扩展点上进行扩展。
  使用扩展点可以降低各个插件项目之间的耦合性,让各个插件工程的功能相对独立,防止插件工程循环依赖的发生。
  下面我们就通过一个例子来了解一下如何在Eclipse中创建一个新的扩展点,并在这个扩展点上进行扩展。
刘广昱
骑士
骑士
  • UID363
  • 粉丝1
  • 关注1
  • 发帖数31
  • 社区居民
沙发#
发布于:2019-03-18 11:43
    首先来介绍一下我们这个例子的应用场景。
    我们的需求平台有需求插件工程和编辑器插件工程两个插件工程,其中编辑器插件工程依赖了需求插件工程。现在,我们需要实现一个功能,在需求工程的资源管理器工程树中,将业务目标文件中的所有业务目标展示出来。这个功能需要在需求插件工程中进行完成,但是业务目标相关的类是在编辑器插件中进行定义的,我们需要使用编辑器插件工程中的类才能实现这个功能,因为编辑器插件依赖了需求插件,这个时候如果我们再用需求插件去依赖编辑器插件的话就会造成插件循环依赖导致编译报错。如何去解决这个问题呢?这个时候我们就可以在需求插件工程中去自定义一个扩展点,然后在编辑器插件中去实现那个扩展点,这样我们就可以在需求插件中使用扩展点去调用编辑器插件中的内容了。
刘广昱
骑士
骑士
  • UID363
  • 粉丝1
  • 关注1
  • 发帖数31
  • 社区居民
板凳#
发布于:2019-03-18 14:28
首先我们打开需求插件的plugin.xml文件,在扩展点tab页中点击添加按钮,填写扩展点标识和名称,自定义一个扩展点。

图片:QQ图片20190318142241.png


图片:QQ图片20190318142752.png

刘广昱
骑士
骑士
  • UID363
  • 粉丝1
  • 关注1
  • 发帖数31
  • 社区居民
地板#
发布于:2019-03-18 14:57
    接着,我们再在需求插件中定义一个接口,这个接口用来定义获取文件的内部内容的方法,在编辑器插件中扩展点的实现类中我们会实现这个接口,在需求插件中我们会通过查找扩展点直接调用这个接口定义的方法。
    接口中定义的方法传入一个文件资源,返回该文件资源内部内容的数组,可以直接返回树节点,也可以返回字符串再在需求插件中进行组装。接口定义如下所示:

图片:QQ图片20190318145434.png

刘广昱
骑士
骑士
  • UID363
  • 粉丝1
  • 关注1
  • 发帖数31
  • 社区居民
4楼#
发布于:2019-03-18 15:03
    然后我们在编辑器插件中去实现之前定义的扩展点。
    打开编辑器插件的plugin.xml文件,在扩展选项卡中添加我们之前定义的扩展点。

图片:QQ图片20190318145927.png


    然后我们再在plugin.xml选项卡中为该扩展点绑定一个实现类。

图片:QQ图片20190318150234.png

刘广昱
骑士
骑士
  • UID363
  • 粉丝1
  • 关注1
  • 发帖数31
  • 社区居民
5楼#
发布于:2019-03-18 15:08
    这个实现类实现了我们之前在需求插件中定义的接口,解析参数提供的文件资源,返回一个文件资源内部内容的数组。

图片:QQ图片20190318150234.png

刘广昱
骑士
骑士
  • UID363
  • 粉丝1
  • 关注1
  • 发帖数31
  • 社区居民
6楼#
发布于:2019-03-18 15:19
    最后我们只需要在需求插件中要得到文件内部内容的地方查找我们自定义的扩展点,并将其实现类强制转换成我们定义的接口,再调用接口中的方法即可。

图片:QQ图片20190318151819.png

张帅
侠客
侠客
  • UID323
  • 粉丝0
  • 关注0
  • 发帖数8
7楼#
发布于:2019-03-18 15:49
可以参考开闭原则
胡明
侠客
侠客
  • UID433
  • 粉丝1
  • 关注1
  • 发帖数9
8楼#
发布于:2019-03-18 15:51
麻吉亚巴库勒
刘力
论坛版主
论坛版主
  • UID324
  • 粉丝3
  • 关注2
  • 发帖数19
9楼#
发布于:2019-03-18 15:51
受益匪浅
胡明
侠客
侠客
  • UID433
  • 粉丝1
  • 关注1
  • 发帖数9
10楼#
发布于:2019-03-18 15:52
刘力:受益匪浅回到原帖
舔狗
郭伟
新手
新手
  • UID479
  • 粉丝0
  • 关注0
  • 发帖数5
11楼#
发布于:2019-03-18 16:01
豁然开朗,茅塞顿开
郭伟
新手
新手
  • UID479
  • 粉丝0
  • 关注0
  • 发帖数5
12楼#
发布于:2019-03-18 16:02
胡明:舔狗回到原帖
舔狗
游客

返回顶部