国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在Eclipse RCP中實現反轉控制(IoC)

2019-11-18 11:35:03
字體:
來源:轉載
供稿:網友

  Eclipse富客戶平臺(RCP)是一個功能強大的軟件平臺,它基于插件間的互連與協作,答應開發人員構建通用的應用程序。RCP使開發人員可以集中精力進行應用程序業務代碼的開發,而不需要花費時間重新發明輪子編寫應用程序治理的邏輯。

  反轉控制(Inversion of Control, IoC)和依靠注入(Dependency Injection, DI)是兩種編程模式,可用于減少程序間的耦合。它們遵循一個簡單的原則:你不要創建你的對象;你描述它們應當如何被創建。你不要實例化你的部件所需要對象或直接定位你的部件所需要的服務;相反,你描述哪個部件需要哪些服務,其它人(通常是一個容器)負責將它們連接到一起。這也被認為是好萊塢法則:don't call us--we'll call you。

  本文將描述一個簡單的方式在Eclipse RCP應用程序中使用依靠注入。為了避免污染Eclipse 平臺的基礎結構以及透明地在RCP之上添加IoC框架,我們將結合使用運行時字節碼操作技術(使用 ObjectWeb ASM庫)、java類加載代理(使用java.lang.instrument包)以及Java annotation。

  什么是Eclipse富客戶平臺?

  用一句話來講,富客戶平臺是一個類庫、軟件框架的集合,它是一個用于構建單機和連網應用程序的運行時環境。

  盡管Eclipse被認為是構建集成開發環境(IDE)的框架,從3.0開始,Eclipse整個產品進行了重構,分割成各種不同的部件,它些部件可以用于構建任意的應用程序。其中的一個子集構成了富客戶平臺,它包含以下元素:基本的運行時環境、用戶界面組件(SWT和JFace)、插件以及 OSGI層。圖1顯示了Eclipse平臺的主要部件。

在Eclipse RCP中實現反轉控制(IoC)(圖一)
圖1. Eclipse平臺的主要部件

  整個Eclipse平臺是基于插件和擴展點。一個插件是一個可以獨立開發和發布的最小的功能單元。它通常打包成一個jar文件,通過添加功能(例如,一個編輯器、一個工具欄按鈕、或一個編譯器)來擴展平臺。整個平臺是一個相互連接和通信的插件的集合。一個擴展點是一個互相連接的端點,其它插件可以用它提供額外的功能(在Eclipse中稱為擴展)。擴展和擴展點定義在xml配置文件中,XML文件與插件捆綁在一起。

  插件模式加強了關注分離的概念,插件間的強連接和通訊需要通過配線進行設置它們之間的依靠。典型的例子源自需要定位應用程序所需要的單子服務,例如數據庫連接池、日志處理或用戶保存的首選項。反轉控制和依靠注入是消除這種依靠的可行解決方案。

  反轉控制和依靠注入

  反轉控制是一種編程模式,它關注服務(或應用程序部件)是如何定義的以及他們應該如何定位他們依靠的其它服務。通常,通過一個容器或定位框架來獲得定義和定位的分離,容器或定位框架負責:
  • 保存可用服務的集合
  • 提供一種方式將各種部件與它們依靠的服務綁定在一起
  • 為應用程序代碼提供一種方式來請求已配置的對象(例如,一個所有依靠都滿足的對象), 這種方式可以確保該對象需要的所有相關的服務都可用。
  現有的框架實際上使用以下三種基本技術的框架執行服務和部件間的綁定:
  • 類型1 (基于接口): 可服務的對象需要實現一個專門的接口,該接口提供了一個對象,可以從用這個對象查找依靠(其它服務)。早期的容器Excalibur使用這種模式。
  • 類型2 (基于setter): 通過JavaBean的屬性(setter方法)為可服務對象指定服務。HiveMind和SPRing采用這種方式。
  • 類型3 (基于構造函數): 通過構造函數的參數為可服務對象指定服務。PicoContainer只使用這種方式。HiveMind和Spring也使用這種方式。
  我們將采用第二種方式的一個變種,通過標記方式來提供服務(下面示例程序的源代碼可以在資源部分得到)。 聲明一個依靠可以表示為:
 @Injected public void aServicingMethod(Service s1, AnotherService s2) {   // 將s1和s2保存到類變量,需要時可以使用 }
  反轉控制容器將查找Injected注釋,使用請求的參數調用該方法。我們想將IoC引入Eclipse平臺,服務和可服務對象將打包放入Eclipse插件中。插件定義一個擴展點 (名稱為com.onjava.servicelocator.servicefactory),它可以向程序提供服務工廠。當可服務對象需要配置時,插件向一個工廠請求一個服務實例。ServiceLocator類將完成所有的工作,下面的代碼描述該類(我們省略了分析擴展點的部分,因為它比較直觀):
    /**      * Injects the requested dependencies into the parameter object. It scans      * the serviceable object looking for methods tagged with the 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲周县| 利辛县| 当阳市| 大城县| 云霄县| 大丰市| 嘉定区| 陆河县| 蒲江县| 车致| 宽城| 呼和浩特市| 灌南县| 滦平县| 黔江区| 商河县| 宣武区| 阳江市| 精河县| 丘北县| 乐平市| 佛冈县| 长阳| 栾川县| 黑山县| 揭阳市| 正安县| 洪洞县| 安泽县| 聂拉木县| 浮山县| 龙井市| 崇仁县| 上虞市| 洛浦县| 桐乡市| 修水县| 桐庐县| 安阳县| 呼伦贝尔市| 孝感市|