在SpringBean生命周期中加入鉤子函數(shù)(翻譯)_第1頁
在SpringBean生命周期中加入鉤子函數(shù)(翻譯)_第2頁
在SpringBean生命周期中加入鉤子函數(shù)(翻譯)_第3頁
在SpringBean生命周期中加入鉤子函數(shù)(翻譯)_第4頁
在SpringBean生命周期中加入鉤子函數(shù)(翻譯)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、在SpringBean生命周期中加入鉤子函數(shù)(翻譯)1前言提供一個控制反轉功育S是in匡架的核心功能之一。Spring在其應用程序上下文中編排并管理這些ean的生命周期。在本教程中,我們將研究這些eai的生命周期以及如何在其生命周期中加入這些鉤子函數(shù)。代碼示例他的文章附有上的工作代碼示例。2什么是SpringBea?n讓我們從基礎開始在創(chuàng)建、編排和銷毀方面受ng的ppiain控制的每個對象都稱為SpringBean定義Springea最常見的方法是使用pn注解:pnenaSpringBean如果啟用了Spring的自動掃描,則會在應用程序上下文中添加一個SpringBe對象。另一種方法是使用S

2、pring的配置類結合Bean注解進行配置:nigrainaSpringnigrainBeanpiSpringBeanSpringBean)rernneSpringBean)3SpringBean的生命周期當我們觀賽pringea的生命周期時,我們可以看到從對象實例化到銷毀的多個階段。SPRINGBEANLIFECYCLECREATIONInstantiation士川川川川DESTRUCTIONPopulatingPropertiesPre-DestroyPre-Initialization接下來讓我更詳細地解釋上圖中的這些階段。1)Bean的創(chuàng)建階段Beanisreadyan(實例aingr

3、填充屬性):在實例化對象后,Spring會掃描實現(xiàn)其方oSpring實例化eari對象,就像我們手動創(chuàng)建a對象實例一樣。ar接口,回調ar的回調方法,并開始為其相關屬性進行設值。re外,niia預初始化nSpringBeai后處理器n注解的方法在其之后被調用。Beanr在這個階段開始工作,pring調初始化前處理方法erper標隹初始化)Spririg,行實現(xiàn)niiai泊接卿的aerrperi方的法e這是正式的初始化。ni(i自定義初始化n:戈們用器Bean,an注解的inie屬性指定的初始化方法。r在這個階段再次工作。此階段觸發(fā)其初始化后處理方:2)Bean的銷毀階段注解標記的方法。接口的r

4、e_e預銷毀Spr在此階段觸發(fā)reee標準銷毀:Spring執(zhí)行ea實現(xiàn)ipa接M的ee自定義銷毀)nSprin在此階段觸發(fā)Bean注解的er屬性指定的方法,Post-Imtiarzationr方法。:。Spring將在最后一個階段運行它們。DestroyCustomDestructioneriniiaiaieBeandestroyedBereni此iaiain)4如何在Bean生命周期中加入鉤子函數(shù)?在Spring應用程序中,我們有多種方法可以將鉤子函數(shù)加入到eai生命周期的各個階段。讓我們看看一些例子。1)使用springs供的回調接口我們可以實現(xiàn)Spring的nitiaiingBeat在

5、標準初始化階段運行自定義操作:oponentcassSpringBeanipeentsnitiaiingBeanerriepicoiaterPropertiesSet)同樣,我們可以實現(xiàn)isposabeB接口讓Spring在標準銷毀階段調用estro方法oponentcassSpringBeanipeentsisposaeBeanerriepicoiestro)2)使用JSR-25注解Sprin官方支持中的PostonstancPreestro注解。因此,我們可以使用它們在預初始化和銷毀階段加入鉤子函數(shù)oponentcassSpringBeanPostonstrctpicoipostonstr

6、ct)Preestropicoipreestro)3)使用Bean注解的相關屬性此外,當我們定義pringBear時,我們可以在Ja2配置類中設置Bean注解的initetoddestroet屬性:onigrationcassSpringonigrationBeaninitetoonnitiaieestroetoonestro)picSpringBeanSpringBean)retrnneSpringBean)我們應該注意,如果我們的ean中有一個名為cose或)sto的公共方法,那么默認情況下它會被當成自定義銷毀方法不用顯式指定)oponentcassSpringBeanpicoicose)

7、但是,如果我們不希望這種行為,我們可以將)Bean注解的estroet屬性設為空字符串即estroeto)=以此來禁用這種默認行為。onigrationcassSpringonigrationBeanestroeto)picSpringBeanSpringBean)retrnneSpringBean)配置對于遺留應用程序,我們可能仍會在配置中保留一些ean幸運的是,我們?nèi)匀豢梢栽谥信渲眠@些屬性。4)使用Bear后處理器BeanPostprocessor我們可以利甩eanPostProce接口在Spring初始化之前或之后運行任何自定義操作,甚至返回修改后的cassBeanPostProcess

8、oripeentsBeanPostProcessorerriepicectpostProcessBeorenitiaiationecteanStringeanae)trosBeansceptionretrneanerriepicectpostProcessternitiaiationecteanStringeanae)trosBeansceptionretrneanBeanrCe是針0對一個特定的Bean我們應該注意,Spring的Beanr是針對rprin上下文中定義的所有ear。5)使用Aware口另一種方法是使用war接口:pnenaSpringBeanipeenBeanaeAwareA

9、ppiainneAwareerriepiieBeanaeSringnae)erriepiieAppiainneAppiainneappiainne)rwBeanepin我們可以使用一些Aware接口將Spring上下文的某些特性如Beana、EBeana等)注入到我們的ean中。5為什么我們需要在Bean生命周期中加入鉤子函數(shù)?當我們需要根據(jù)新的需求擴展我們的軟件時,對于找到最佳實踐來保持我們的代碼庫的長期可維護性而言至關重要。在Spring框架中,在大多數(shù)情況下,添加鉤子函數(shù)到eai生命周期是擴展我們的應用程序的好方法。1)獲取Bear的相關屬性用法之一是在運行時獲取eai屬性(如ean名稱

10、)。例如,當我們需要做一些日志記錄時:pnenaaeSpringBeanipeenBeanaeAwareggerggerggerargeggeraeSpringBeana)piieBeanaeSringnae)ggerinnaereae)2)動態(tài)改變SpringBea實例在某些情況下,我們需要以編程方式定義ngean當我們需要在運行時重新創(chuàng)建和更改eari實例時,這可能是一個比較實用的解決方案。接下來讓我們創(chuàng)建一個pai服務實例該服務實例能夠按需動態(tài)更新paaaeep到最新版本:SerieapainSerieipeenBeanarAwareeaiaeBeanariaeBeanarpaaaeep

11、iripaaaeepirerriepiieBeanarBeanareanar)rwBeanepiniaeBeanareaiaeBeanar)eanarpaepaaae)piipaepaaae)Sringpaerpwniaaem/ip-dataAraBeaneiniineiniinBeanefinitionBildergeneriBeaneiniinpaaaeepository.class)arperaeiepaeUrl)geBeaneiniin)aeBeanarregierBeaneiniinipaaaeepsitory,einiion)ipaaaeepirialeBeanFactorygeB

12、eanpaaaeepiory.lass);我們可以在Beanar接口的輔助下訪問到Beana實例。因此,我們使用最新的數(shù)據(jù)庫文件動態(tài)創(chuàng)建我們的paaaeepean并通過將其注冊到Spring上下文來更新我們的ear定義。此外,我們在eBeana方法中獲取Beana實例后立即調用我們的paepa方法n因此,我們可以在Spring上下文啟動之初就創(chuàng)建paaaeepirear的個實例。3)從Spring上下文的外部訪問Bean另一種情況是/Spring上下文外部訪問Appiain或nBeena實例。例如,我們可能希望將Beana注入到非Spring容器管理的類中,以便能夠訪問該類中的Springea

13、或其他的一些配置。Spring和ar庫之間的集成是展示這種用法的一個很好的例子:AwireapaenSpringBeanpeenAppianContextAwarepriaeAwireapaeBeanareanatory;erriepiieAppiainneinaAppiaionConteeanarnegeAwireapaeBeanatory();ntext)ndle)erriepreeereaenaneinariggerireBnerwepininaeperreaenanene)eanarawireBean)rern在這個例子中,我們使用nn接口來訪問rnc并使用n自動裝配最初不受Sprin

14、g管理的中的依賴項。此外,常見的Spring之間的集成是另一個有代表性的例子:nigrinignfigpriirppipplipppnrirgiinngrginn用Springnigr注解將r的程序在啟動時可注冊這些an6DSPring鉤子函數(shù)的執(zhí)行順序標記為ig-個配置類,我們注入ppn實例,并以此實例查找由注解標記的所有下面我們寫一個Spring來查看其生命周期各個階段鉤子函數(shù)的執(zhí)行順序:niSpringingpplipriringringringgrnrriprinringnrrippliprinppprinrriprininiprininiPrprinrrirprinptionrprin此外,我們還創(chuàng)建了一個ro它在r的初始化之前和之后會被回調:rrirnrrirnninninnin,StringnprinnprinnSpringnpinSpringnni接下來,我們編寫一個Spring配置類來定義我們的nigrinSpringigurationrnnniniSpringrnnSpringiniSpringnnnininSring最后,我們使用注解來編寫一個測試類:看我們的最終結果,我們的測試方法記錄了生命周期之間鉤子函數(shù)的執(zhí)行先后順

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論