若是你在程序中用了 framework,你须要与 framework 有一个约定 ,例如,一个java对象负责处理一个 toolbar 按钮的点击事件,framework 须要知道要调用这个对象的那个方法。java
为了达到这个目的,每一个 framework都定义了一个API , 这个API 中定义了你的代码该如何和框架交互, 也定义了由 框架 来 建立或 管理的 application objects.app
传统的方式是经过继承来定义API,这种方式要求你的类要继承一个类或者实现一个接口,Eclipse 3.x platform 就是用的这种方式框架
例如框架会定义 一个抽象类,定义了那些方法必须实现。用上面的 toolbar 按钮的例子来讲,或许有一个叫作 execute()的方法, 框架必须知道当按钮点击的时候调用它。eclipse
经过继承来定义API ,耦合性比较高,例如,测试类没有框架环境,没办法运行。对于框架的更新和扩展也是很差的 。函数
因此 Eclipse 4.x不在使用这种方法了测试
Eclipse 4.x 的API是经过注解来实现的, 用来标识哪些方法 在某个时间点被调用,这些注解被叫作behaveor annotations(行为注解)ui
Eclipse 生命周期注解 for partsspa
注解 | 描述 |
---|---|
@PostConstruct | 这个注解在 类构造函数初始化后,而且 字段和 方法 注入完成以后调用 |
@PreDestroy | 这个注解在类被销毁以前调用,能够用来清理 resources |
@Focus | 这个注解在 part 得到焦点时候调用 |
@Persist | 这个注解 在 由Eclipse framework 触发的 part 的保存请求时候调用 |
@PersistState | 这个注解 在 model object 被 dispose以前调用,因此该注解能够用来保存part 实例 状态。它的调用时机在@PreDestory 以前。 (@PersistState先调用,@PreDestory 后调用) |
@PostConstruct ,@PreDestroy 在 javax.annotation包中,@Persist,@PersistState ,@Focus 在 org.eclipse.e4.ui.di 包中.net
以上注解与@Inject一块儿工做时候,会致使 方法被调用两次,第一次是依赖注入,第二次 是行为注解,orm
这是错误的,不该该这么使用。(这特么不是框架的bug?)
推荐使用@PostConstruct 注解 来创建 用户界面, 固然也能够在构造函数中创建用户界面,不过不建议这么作,由于此时 field 和 method 尚未被注入