Eclipse4 RCP 指南

Eclipse 上下文

什么是 Eclipse 上下文?

在 Eclipse 应用程序启动的时候,Eclipse 运行时基于 IEclipseContext 接口创建一个对象,这个对象叫做 Eclipse 上下文。

上下文类似于 Map 数据结构,对象可以与特定的 key 关联,key 是字符串,在几个情况下使用全资格类名作为 key。值(key指向的)可以被注入到其他对象。

Eclipse 上下文中的关系定义

就像前面描述的,Eclipse 上下文类似 Map 数据结构,但是和 Map 不同,Eclipse 上下文是层次结构,并且也可以为请求的 key 动态计算值。

对于特定的模型对象(参考"哪个模型对象有一个本地的上下文?"),一个本地上下文被创建,这个上下文关联一个应用程序模型对象。

不同的上下文对象是通过一个基于你的应用程序模型的层次树结构来连接,这个层次中的最高层是应用程序上下文。

一个例子上下文层次可以用下图来描绘。

对象可以放在不同的层中,这允许同样的 key 指向层次中不同的对象。

例如,一个 Part 可以通过一个类似于下面的字段申明表达一个依赖到它的 Composite 对象:@Inject Composite parent;,因为 Part 有不同的本地上下文,它们可以得到不同 Composite 对象。

哪个模型对象有一个本地上下文?

当前下列的模型元素实现 MContext 接口,因此有它们自己的上下文:

  • MApplication
  • MWindow
  • MPerspective
  • MPart
  • MPopupMenu

Eclipse 上下文的生命周期?

Eclipse 在启动时根据应用程序模型建立上下文层次,通常,它将预定义 keys 的特定对象放到上下文中,例如,services 来控制 Eclipse 框架的功能。

模型对象以及基于 class URI 属性创建的对象是通过 Eclipse 平台创建。对于每个有定制上下文的模型元素,Eclipse 框架决定哪个对象应该是模型对象有效的本地上下文,如果需要的话,它也创建模型元素类 URI 属性引用的 Java 对象,这是,例如,如果 Part 对用户可见的情况。

Note The renderer framework is responsible for creating the local context of the UI related model elements. This framework allows you to define classes which are responsible for setting up the UI implementation of the model objects. A class responsible for a model element is called the renderer for this model element. For example, the ContributedPartRenderer class is the default renderer for part model objects. This renderer creates a Composite for every part and puts this Composite into the local context of the part.

在初始化创建 Eclipse 上下文层次之后,框架或应用程序代码可以改变上下文中存储的 key-value 对。这种情况下,对象是通过相关的 Eclipse 功能(例如通过 Eclipse 依赖注入框架)创建的会更新为新值。

上下文中的对象在内存中保存(暂时性的),也就是说,当应用程序停止时,上下文就销毁了。