淺析擴展點(Extension Point)
一、概述
擴展(Extension)是很多可擴展項目中一個關鍵的機制,可以利用擴展向平臺添加新功能。但是擴展不能隨意地創建,必須按照擴展點(Extension Point)定義的規范進行明確的聲明,平臺才能識別出這些擴展。所謂擴展點,就是系統定義出來可以讓你擴展的地方,可以認為是一些擴展的契約,而擴展,這是你對這些擴展點的實現,當然你自己的插件也可以定義擴展點供別的開發人員擴展。
下面是擴展點的概念圖

二、Eclipse中的應用
對于擴展,Eclipse采用Extension Point的方式來實現,每個Plugin可定義自己的Extension Point,同時也可實現其他Plugin的Extension Point,在Eclipse中通過在plugin.xml中進行描述,描述的方法為通過的形式來定義Plugin的擴展點,通過的形式來定義實現的其他Plugin的擴展點,所提供的擴展點通過schema的方式進行描述,詳細見eclipse extension-point schema規范,為了更好的說明擴展點這個概念,舉例如下,如工具欄就是工具欄Plugin提供的一個擴展點,其他的Plugin可通過此擴展點添加按鈕至工具欄中,并可相應的添加按鈕所對應的事件(當然,此事件必須實現工具欄Plugin此擴展點所要求的接口),工具欄的Plugin將通過callback的方式來相應的響應按鈕的動作。可見通過Extension Point的方式可以很好的提供Plugin的擴展方式以及實現擴展的方式。
Eclipse中的extension point
<extension
id="com.primeton.studio.builder"
name="EOSBuilder"
point="org.eclipse.core.resources.builders">
可以在這里自由的按照定義的xsd,實現擴展點
<extension/>
|
平臺會在啟動的過程中,注冊各個擴展點(IExtension point),及擴展點的實現(IExtension),
在運行時,由主線解析IExtension,回調擴展點的實現,當然擴展實現必須遵循擴展點的接口契約。
三、tuscany sca容器中的應用
tuscany中對SCA擴展機制包含了4個方面的擴展,有implementaion擴展,binding擴展,interface擴展,databinding擴展。由此來支持sca對不同協議,實現,不同訪問接入方式。
Ø 擴展點StAXArtifactProcessorExtensionPoint:產生靜態組裝信息的擴展點
在composite模型的組裝階段,,這里有4個上面定義的擴展,在此基礎上,用戶的擴展實現遵循標準契約,通過實現相應的契約,由系統對契約的實現做回調,來組裝成完整的composite對象模型。
Ø 擴展點ProviderFactoryExtensionPoint:產生運行時(runtime)信息的擴展點
在composite的模型的激活階段,生成運行時的信息。實現類似于組裝時的擴展。
以上的過程都是一次載入的,為了節省啟動的時間,可以用懶加載來實現,composite的激活可以放在用戶調用階段。
ProviderFactoryExtensionPoint定義的契約如下圖所示:
