欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久