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

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

基于Eclipse開發輕量級Spring插件

2019-11-18 11:38:26
字體:
來源:轉載
供稿:網友
摘要 本文介紹如何在Eclipse中利用SPRing框架作為一個平臺來創建輕量級的能夠與你的現有J2EE應用程序無縫集成的插件。

  一. 引言

  一般地,企業軟件產品都要求在客戶端具有定制能力,而且當客戶必須修改核心產品的配置來引入他們自己的定制時一般都要求進行更新操作。借助于易于擴展和可升級的高度模塊化的軟件,插件技術能夠提供針對這種典型場所下的完美解決方案。

  注釋1-什么是插件呢?一個插件是使用什么樣的代碼構成的?

  在眾多的定義當中,我認為最好的定義當屬Eclipse工程中所定義的:插件是一種代碼貢獻,它能夠把代碼添加到一個系統中的眾所周知的擴展點處。也就是說,一個插件是一個良好定義的代碼包(例如一個jar文件或目錄),它提供足夠的配置能力來實現在系統中的一個特定的眾所周知的位置插入和激活自身。

  插件本身還可以定義另外的其它插件能夠擴展的擴展點。一個擴展點定義了一個語言接口(該插件將提供它的一個實現)和使用該被發現的插件的組件。一個擴展點能夠接受被動態地發現和在運行時刻配置的插件。

  借助于一種擁有清楚定義的擴展點的插件環境,核心產品可以自由升級,而且插件本身可以根據獨立的計劃發行和升級。例如,借助于我的開源Classpath助理工程(基于Eclipse的插件框架),我可以按常規來升級我的Eclipse,而且還可以輕松地發行我自己的插件的更新版本。

  非凡對于java開發者來說,與現有J2EE組件(參考"注釋2-J2EE組件不是插件嗎?")相比,插件提供了一種更好的升級技術。可以設想你的許多EJB是由不同的開發小組構建的;然后,在了解它們能夠良好工作的情況下,就可以把它們整合到一個應用程序中。一個插件架構應該是答應進行這種級別的組件化的。

  注釋2-J2EE組件不是插件嗎?

  是的,J2EE組件,例如EJB和Servlet,都不是插件。盡管它們都具有一定程度的"可插入性"(這是指,你能夠交換一個EJB或Servlet實現),但是配置它們并不那么清楚明快,而且它們缺乏一個插件所具有的輕易的升級能力。例如,Servlet無法把代碼與配置結合到一起。因此,盡管你能夠在其自己的jar文件中打包一個servlet實現;但是,此時你往往需要修改web.xml以便servlet容器能夠識別它。

  乍看上去,EJB似乎更象插件-它們包含提供有關自己信息的發布描述符。然而,EJB也不是插件,因為,典型情況下,它們都要求外部配置(一種在EAR的application.xml中的引用);并且,典型地,它們在其各自的發布描述符中進行彼此參考。這兩種特征都使一個EJB無法成為"插件式可發布的"。

  借助于流行的Spring框架的BeanFactoryPostProcessor接口,開發者可以輕松地創建一個輕量級插件框架。本文正是想討論如何實現這一點;同時,還要向你展示一個使用輕量級插件的工作示例。

  二. 預備你的插件平臺

  在你的平臺能夠支持可插入的組件前,它需要滿足下列兩個標準:

  · 組件必須是自發現的。你已經了解到J2EE組件不能成為真正插件的準確理由。典型情況下,你應該找到一個需要升級的外部配置文件以便該平臺能夠感知新的代碼。

  · 組件必須包含足夠信息以便在應用程序內部集成或配置其本身。

  假如你僅是添加一些不需要與系統進行協作的代碼(也就是說,松耦合的),那么自動發現就是很簡單的。真正的挑戰是結合有緊密集成的自發現。

  三. Spring中的自發現功能

  事實證實,Spring實際上為支持插件開發作了比較好的預備。Spring已經能夠在若干種bean上下文文件中存儲配置,并且它使得自發現配置文件非常簡單。例如,下面的Spring語句自動發現以ctx.xml結尾的存在于classpath的META-INF/services目錄下的任何文件:

<import resource="classpath*:META-INF/services/*.ctx.xml" />
  這種現成的功能正是當構建輕量級插件框架時你要利用的一個特色。

  注重,Spring并不關心它自己的代碼自動發現功能。這通常不是一個問題,因為大多數J2EE容器都提供一個lib目錄,存放于這個目錄下的任何jar文件將被自動地添加到classpath中。這意味著,假如你想以jar文件形式捐獻你的代碼的話,那么在任何一種J2EE容器中實現自發現都會是相當輕易的事情。

  在一個應用程序服務器外,使用例如ant這樣的工具來實現jar文件的自發現也是非常輕易的。下列的Apache Ant XML以一種與一個應用程序服務器類似的方式檢測所有的存在于lib目錄下的jar文件:

<path id="classpath">
<fileset dir="${basedir}/lib">
<include name="**/*.jar"/>
</fileset>
</path>

<target name="start.server" description="launches the server process">
<java classname="platform.bootstrap.Server">
<classpath refid="classpath" />
</java>
</target>


  因此,盡管Spring并不直接支持自發現功能,但是通過使用標準技術,你仍然可以使你的代碼輕易地實現自發現。這一點,與Spring的能夠自動檢測配置的能力相結合,就可以使你既能夠實現代碼捐獻的目的也能夠使你的代碼在系統中被發現和激活。 四. 在Spring中實現自配置

  你需要進一步實現的是,使插件具有自配置能力。盡管Spring并不直接支持這種功能,但是,借助于它提供的一些工具,實現這一目標也是相當直接的。實現自配置的要害部分是BeanFactoryPostProcessor,這是一個Spring調用的接口(該調用應該是在所有配置被發現和加載到一個內存描述之后,但在創建實際的對象之前發生)。

  通過使用BeanFactoryPostProcessor,你可以動態地把所有的bean組合到一起而不必修改原始的文件系統配置。下列代碼是我的BeanFactoryPostProcessor實現的核心部分:PluginBeanFactoryPostProcessor(下載源碼中提供了完整的類):

private String extensionBeanName;//經由spring設置(在此沒有顯示setter)
private String propertyName;//經由spring設置(在此沒有顯示setter)
private String pluginBeanName;//經由spring設置(在此沒有顯示setter)
/*
*(非Javadoc)
*@請參考BeanFactoryPostProcessor#postProcessBeanFactory(ConfigurableListableBeanFactory)
*/
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory)
throws BeansException {



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凯里市| 绩溪县| 正蓝旗| 西峡县| 桃源县| 舟山市| 永靖县| 龙胜| 桓台县| 视频| 平邑县| 马山县| 田林县| 嫩江县| 华容县| 宁德市| 隆化县| 临夏县| 行唐县| 辉南县| 兖州市| 肥东县| 九江县| 师宗县| 河间市| 威远县| 瑞金市| 日喀则市| 始兴县| 金华市| 沁阳市| 巴东县| 康保县| 勃利县| 方正县| 平泉县| 洞头县| 久治县| 湾仔区| 西平县| 兴化市|