Eclipse RCP教程 – 17 – 使用注解来定义行为

17.1.在框架中的API定义

如果你在应用程序中使用了一个框架,则需要制定一个应用程序与框架进行互动的规范。例如,如果一个Java对象用于处理工具栏按钮的点击,则对应的框架需要知道需要调用该对象的哪个方法。

出于此目的所有的框架都会定义一个应用编程接口(Application Programming Interface ,API)。该API会定义如何通过代码来与框架进行交互。API还会定义被框架创建或控制的应用程序对象的交互。一般来说,框架使用继承或注解来实现此目的。

17.2.通过继承来定义API

定义API的“经典”方式是通过继承。这种方式会要求你的类扩展或实现框架类和接口。Eclipse 3.x 平台API就使用了此种方式。

例如,框架定义了一个抽象类来定义需要实现的方法。

在工具栏按钮的样例中,对应的需要调用execute() 方法,并且框架知道一旦按钮被点击则此方法必定会被调用一次。

通过继承来进行API定义是一种简单的API定义方式,不过它也会将对应的类与框架耦合在了一起。例如,脱离框架对类进行测试会变得很困难。这还会导致对框架进行扩展或升级变得困难,因为这些更新可能会影响到客户。这也是为什么Eclipse 4.x不再使用这种方式的原因。

17.3. 使用注解来定义API

Eclipse 4.x平台API是基于注解的,例如使用注解来确定何时应该调用哪个方法。这些注解被称为行为注解(behavior annotations)。

下表列出了part的可用的behavior annotations

6. PartEclipse生命周期注解
注解 描述
@PostConstruct 在类被构建后并且字段和方法注入已经被执行后调用。
@PreDestroy 在类销毁前被调用。可以用于清理资源。
@Focus 在part获得焦点时被调动。
@Persist 如果由Eclipse框架触发了对part的保存请求则进行调用。
@PersistState 在模型对象被废弃之前调用,因此对应的part可以保存其实例的状态。该方法会在@PreDestroy注解的方法之前调用。

注解 @PostConstruct, @PreDestroy 被包含在包 javax.annotation之中。@Persist, @PersistState 和 @Focus 是 org.eclipse.e4.ui.di 包的一部分。

Eclipse为命令和应用程序生命周期定义了额外的Behavior annotation,这些会分章节进行说明。

 20170326_010 Behavior annotation意味着框架需要为方法提供特定的参数,例如,框架也执行方法依赖注入。如果你还增加了Inject  注解,则对应的方法会被执行两次,第一次在依赖注入阶段,第二次是因为Behavior annotation。这一般不是预期希望的因此会导致错误。

17.4.使用@PostConstruct方法来构建用户界面

我们建议使用带有@PostConstruct注解的方法来构建part的用户界面。也可以在构造方法中创建用户界面,但是我们并不推荐,因为在构造方法执行时字段和方法的注入并未完成。

在一个@PostConstruct方法中创建用户界面需要@Inject方法了解用户界面可能尚未创建完毕。

 20170326_010 为何@PostConstruct方法未被调用?

如下描述仅对Eclipse4.6 (Eclipse Neon)之前的版本有效。在Eclipse 4.6中框架使用了Java版的@PostConstruct注解,因此下面描述的问题不会再出现了。

在Eclipse 4.6之前,Java7和Eclipse平台都暴露了@PostConstruct注解。在你的Eclipse应用程序中,你需要告诉框架应使用Eclipse平台的注解。org.eclipse.core.runtime的正确版本中导出了javax.annotation。如果由于某种原因你需要避免对org.eclipse.core.runtime的依赖,则需要定义一个对javax.annotation包的依赖,并且设置版本为1.0.0。参考《Eclipse 4 RCP FAQ》来了解关于此问题的细节。

 

打赏一下
支付宝
微信
除非注明,博客文章均为原创,转载请标明文章地址
本文地址: http://www.javafxchina.net/blog/2017/05/eclipse-rcp-17/
百度已收录