国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
利用Spring框架改進J2EE編程
利用Spring框架改進J2EE編程            【字體:
利用Spring框架改進J2EE編程
 
作者:佚名    文章來源:不詳    點擊數(shù): 13    更新時間:2006-4-29    
1 2 3 下一頁
摘要
J2EE編程正在變得越來越復雜。J2EE已經發(fā)展為一個API、復雜化的編程和配置的復雜網絡。為了應對這種復雜性,新的框架和方法不斷涌現(xiàn)。這些框架高度依賴于一個稱為IoC(Inversion of Control,反向控制)的概念。本文將探討這種方法的一些特性和優(yōu)點,因為這種方法與J2EE編程相關,而且可以使J2EE編程變得更輕松。
簡介
馬克·吐溫的一句話常被引用:“……關于我死亡的報道是一種夸張。”現(xiàn)在已經出現(xiàn)了很多關于.net的流言,以及認為J2EE API的復雜性無法克服和EJB作為一種組件架構即將滅亡的流行極客(geek)文化。從學術或者只是想像的立場來看,這沒什么大不了的,但事實是J2EE/EJB API已經經歷了一場達爾文式的進化。具有DCOM或CORBA項目經驗的讀者會明白我的意思。過去,人們都樂于聽聞EJB組件模型的美好前景。實際情況是,人們在與J2EE相關的各個方面都投入巨大。宣布拋棄以前的所有工作并重新組織,這種想法看起來也許有理,但是它并沒有建立在良好的業(yè)務洞察力之上。EJB繼續(xù)發(fā)展,而術語、實踐和框架也隨之涌現(xiàn)(spring up),它們彌補了J2EE API的不足。我說的不是“Spring出現(xiàn)(up)”,對吧?
我是一名顧問,職責是幫助構建大型的分布式應用程序,而且通常是J2EE應用程序。因此,我有機會親歷許多項目的整個生命周期。另外我還能夠將我從一個剛剛完成的項目中剛剛學到的東西直接帶入一個全新的項目。從某種意義上說我的“自然選擇”過程加快了。我可以說最近Spring(更具體地說就是IoC,即反向控制)已經越來越多地融入到我的項目中了。在本文中,我將從支持或增強J2EE項目的角度來探討Spring。更確切地講,Spring框架能夠標準化許多J2EE最佳實踐,還能同類化(homogenize)許多無處不在的J2EE模式。接下來我們將瀏覽Spring龐大體系中的一小部分內容,重點介紹(依我淺見)能夠幫助改進J2EE應用程序的功能。
IoC簡介
一般來說,IoC是一種管理類之間關聯(lián)的技術。沒錯,就這么簡單!任何人都不是孤立的,對于各個對象來說也是如此。應用程序中的對象是相互依賴的。通過編程方式來表現(xiàn)這種依賴性通常既冗長又容易出錯。好的IoC框架將聲明式地(通過一個XML配置文件)而不是編程式地(這種方式的可靠性較差)——串連起應用程序之間的相互依賴性。
自由使用接口是IoC開發(fā)的一個主要方針。接口編程大大提高了應用程序的靈活性,從而增強了聲明式的關聯(lián)。接口實現(xiàn)是通過IoC配置在運行時聲明的,這樣就能夠在不影響或少影響實際應用程序代碼的情況下“重建(rewire)”關聯(lián)。這在各種IoC框架中是反復提及的一個主題,一般而言,也是應該遵循的良好實踐。
一個小例子
我喜歡通過例子來更快地理解概念。下面就是運用了IoC的一組例子;您將看到,這些例子的復雜性是逐遞增的。大多數(shù)人在一開始使用IoC容器時都是利用其依賴注入(inject dependency)功能——即,聲明式地將對象關聯(lián)起來。利用IoC有助于創(chuàng)建更整潔的代碼,如有必要重建對象之間的關聯(lián),一般來說對于這些代碼也會更靈活、更容易。IoC的優(yōu)點遠不止依賴注入,而其擴展功能確是以依賴注入程序為起點的。
我們將從構建簡單的依賴注入例子開始。第一個例子用于闡明已經提及的兩個概念。第一個概念是IoC在運行時構建和關聯(lián)對象的能力,第二個是與接口編碼相結合而產生的靈活性。首先假定架構師遞交了圖1所示的UML。
圖1. 接口可插性
這個小例子表示一個溫度測量系統(tǒng)。幾個傳感器對象屬于不同的類型,但都實現(xiàn)了ProtocolAdapterIfc接口,因此在將它們插入TemperatureSensor對象時,它們是可互換的。在需要TemperatureSensor時,系統(tǒng)中的某個實體必須知道要生成并與該傳感器對象關聯(lián)的ProtocolAdapterIfc的具體類型。在本例中,該傳感器可基于命令行參數(shù)、數(shù)據庫中的行或通過屬性文件進行配置。本例還不足以造成挑戰(zhàn)或展示一個復雜框架,但它足以闡明IoC基礎。
但是,想象一下:在一個相當復雜的應用程序中這種情況屢屢發(fā)生,而您還希望能動態(tài)地——至少要在外部——改變對象關聯(lián)。假設有一個DummyProtocolAdapter,它總是返回42這個值,使用它來進行測試。為什么不提供一個單個的統(tǒng)一框架?——讓開發(fā)人員能夠依靠該框架,以一種一致的、外部配置的方式建立類之間的關聯(lián),并且不引起工廠單元素類(factory singleton classe)的異常增加。這聽起來可能沒什么大不了,但它要依賴于IoC的簡單性。
我們使用一個TemperatureSensor類,它與一個實現(xiàn)ProtocolAdapterIfc接口的類有關聯(lián)。TemperatureSensor將使用該委托類來獲得溫度值。如UML圖所示,在實現(xiàn)ProtocolAdapterIfc并且隨后可用于該關聯(lián)的應用程序中有若干個類。我們將使用IoC框架(在本例中是Spring)來聲明要使用的ProtocolAdaperIfc的實現(xiàn)。Spring將在運行時建立關聯(lián)。我們先來看XML代碼,它將實例化TemperatureSensor對象并將一個ProtocolAdapterIfc實現(xiàn)與它關聯(lián)起來。該代碼如下所示: <bean id="tempSensor" class="yourco.project.sensor.TemperatureSensor"> <property name="sensorDelegate"> <ref bean="sensor"/> </property> </bean> <!-- Sensor to associate with tempSensor --> <bean id="sensor" class="yourco.project.comm.RS232Adapter"/>
看了這些代碼之后,對于其目的就應該非常清楚了。我們配置Spring來實例化TemperatureSensor對象,并將其與RS232Adapter相關聯(lián),作為實現(xiàn)ProtocolAdapterIfc接口的類。若想改變已經與TemperatureSensor關聯(lián)的實現(xiàn),惟一需要更改的就是sensor bean標記中的class值。只要實現(xiàn)了ProtocolAdapterIfc接口,TemperatureSensor就不再關心關聯(lián)了什么。
將這應用于應用程序相當簡單。我們必須先接入Spring框架,將它指向正確的配置文件,然后根據名稱向Spring索取tempSensor對象的實例。下面是相應的代碼:
ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext( new String[] { "simpleSensor.xml" }); BeanFactory bf = (BeanFactory) appContext; TemperatureSensor ts = (TemperatureSensor) bf.getBean("tempSensor"); System.out.println("The temp is: "+ ts.getTemperature());
可以看出,這些代碼并不是非常難。首先是啟動Spring并指定要使用的配置文件。接下來根據名稱(tempSensor)引用Bean。Spring使用這樣一種機制:基于simpleSensor.xml文件的描述創(chuàng)建該對象并與其他對象關聯(lián)。它用于注入依賴性——在本例中,通過將它作為一個參數(shù)傳遞給sensorDelegate()方法而實例化RS232Adapter對象并將其與TemperatureSensor對象關聯(lián)。
比較起來,使用編程式Java完成這一任務也不是很難。如下所示:
TemperatureSensor ts2 = new TemperatureSensor(); ts2.setSensorDelegate(new RS232Adapter());
純粹主義者或許會認為實際上這是更好的方法。代碼行數(shù)少,并且可讀性可能更強。確實如此,但這種方法的靈活性要小得多。
可以隨意換入和換出不同層中不同對象的不同實現(xiàn)。例如,若Web層中的組件需要來自新業(yè)務對象的額外的功能,您只需將該業(yè)務對象與Web層對象相關聯(lián),就像上面TemperatureSensor例子中的做法。它將被“注入”到Web對象中以隨時使用。 能夠重新配置整個應用程序的結構,意味著可以輕松更改數(shù)據源。比如說,或者為不同的部署場景創(chuàng)建不同的配置文件,或者為測試場景創(chuàng)建更有用的、不同的配置文件。在測試場景中可能會注入實現(xiàn)接口的模擬對象,而不注入真正的對象。稍后我們將介紹一個這樣的例子。
上面所述的例子可能是依賴注入的最簡單形式。利用相同的策略,我們不僅能夠關聯(lián)不同的類,還能夠在類中安裝屬性。諸如字符串、整數(shù)或浮點數(shù)之類的屬性,只要具有JavaBean樣式的存取器,就可以通過Spring配置文件將它們注入類中。我們還可以通過構造函數(shù)來創(chuàng)建對象和安裝屬性或bean引用。其語法只比通過屬性進行設置稍稍復雜一些。
所有這一切都是利用一種靈活的聲明性配置完成的。無需更改代碼,建立依賴關聯(lián)的所有艱難任務都由Spring來完成。
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
spring框架--總述
Spring的解釋
Spring 學習一(了解Spring)
spring中的AOP與IOC
使用Spring框架的好處(轉帖)
Java EE開發(fā)四大常用框架 2
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服