溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring AOP框架的作用和使用方法

發(fā)布時間:2021-06-16 15:27:40 來源:億速云 閱讀:129 作者:chen 欄目:編程語言

這篇文章主要介紹“Spring AOP框架的作用和使用方法”,在日常操作中,相信很多人在Spring AOP框架的作用和使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring AOP框架的作用和使用方法”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

在向大家詳細介紹Spring AOP框架之前,首先讓大家了解下Spring裝配組件事務(wù),然后全面介紹Spring AOP框架

本文主要探討Spring AOP框架,包括其事務(wù)上下文。從J2EE應(yīng)用程序內(nèi)部連接到單個的數(shù)據(jù)庫并不是什么難事。但是,如果要裝配或者集成企業(yè)級的組件,情況就復(fù)雜了。一個組件可以有一個或多個支持它的數(shù)據(jù)庫,因此,當裝配兩個或更多的組件時,我們希望能夠保持在跨組件的多個數(shù)據(jù)庫中進行的操作的原子性。J2EE服務(wù)器為這些組件提供了一個容器來保證事務(wù)原子性和跨組件獨立性。如果使用的不是J2EE服務(wù)器,則可以利用Spring來幫助我們。Spring基于Inversion of Control(控制反轉(zhuǎn))模式(也稱為依賴注入),它不僅可以連接組件服務(wù),還可以連接關(guān)聯(lián)的事務(wù)上下文。在本文中,我們將Hibernate用作對象/關(guān)系持久性存儲和查詢服務(wù)。

裝配組件事務(wù)

假設(shè)在企業(yè)組件庫里,我們已經(jīng)有一個審計組件,里面有可以被客戶端調(diào)用的服務(wù)方法。然后,當我們想要構(gòu)建一個訂單處理系統(tǒng)時,我們發(fā)現(xiàn)存在這樣的設(shè)計要求:OrderListManager組件服務(wù)同樣需要審計組件服務(wù)。OrderListManager創(chuàng)建和管理訂單,因此所有的 OrderListManager服務(wù)都有自己的事務(wù)屬性。當我們從OrderListManager服務(wù)內(nèi)調(diào)用審計組件時,我們實際上是在把 OrderListManager服務(wù)的事務(wù)上下文傳播給審計服務(wù)。也許將來新的業(yè)務(wù)服務(wù)組件同樣需要審計組件,但那時將在一個不同的事務(wù)上下文中調(diào)用它。實際結(jié)果就是,即使審計組件的功能保持不變,它也可能是由別的業(yè)務(wù)服務(wù)功能組成,包含了混搭的(mix-and-match)事務(wù)屬性來提供不同的運行時事務(wù)性行為。

如果客戶端有TX上下文,那么OrderListManager既可以參與其中,也可以啟動一個新的TX,這取決于客戶端是否在TX中,以及為OrderListManager方法指定了什么樣的TX屬性。這同樣適用于 OrderListManager服務(wù)依次調(diào)用AuditManager方法的情況。

EJB架構(gòu)允許組件裝配者聲明式地給出正確的事務(wù)屬性,從而為他們提供這種靈活性。我們不探討聲明式事務(wù)管理的替代方案(即所謂的編程式事務(wù)控制),因為這會牽涉到代碼更改,從而產(chǎn)生不同的運行時事務(wù)行為。幾乎所有的J2EE應(yīng)用服務(wù)器都按照X/Open XA規(guī)范提供了服從兩階段提交協(xié)議的分布式事務(wù)管理器?,F(xiàn)在的問題是,我們能不能利用EJB服務(wù)器來實現(xiàn)相同的功能?Spring就是其中的一種解決方案。讓我們來看一下Spring如何幫助我們解決事務(wù)組裝的問題:

使用Spring進行事務(wù)管理

我們將看到一個輕量級的事務(wù)基礎(chǔ)架構(gòu),它實際上可以管理組件級的事務(wù)裝配。Spring是其中的一個解決方案。它的優(yōu)點在于,我們不會被捆綁到 J2EE容器服務(wù)(如JNDI DataSource)上。最棒的一點是,如果我們想把這個輕量級事務(wù)基礎(chǔ)架構(gòu)關(guān)聯(lián)到一個已可用的J2EE容器基礎(chǔ)架構(gòu),將不會有任何問題。看起來我們可以利用兩者的優(yōu)點。

另一方面,Spring這個輕量級事務(wù)基礎(chǔ)架構(gòu)使用了一個面向方面編程(Aspect-Oriented Programming,AOP)框架。Spring AOP框架使用了一個支持AOP的Spring bean工廠。在特定于Spring的配置文件applicationContext.xml中,通過在組件服務(wù)級指定事務(wù)特性來劃分事務(wù)。

  1. <beans> 

  2.  

  3. <!-- other code goes here... --> 

  4.  

  5. <bean id="orderListManager"class="org.springframework.
    transaction.interceptor.TransactionProxyFactoryBean"> 

  6. <property name="transactionManager"> 

  7. <ref local="transactionManager1"/> 

  8. </property> 

  9. <property name="target"> 

  10. <ref local="orderListManagerTarget"/> 

  11. </property> 

  12. <property name="transactionAttributes"> 

  13. <props> 

  14. <prop key="getAllOrderList"> 

  15. PROPAGATION_REQUIRED  

  16. </prop> 

  17. <prop key="getOrderList"> 

  18. PROPAGATION_REQUIRED  

  19. </prop> 

  20. <prop key="createOrderList"> 

  21. PROPAGATION_REQUIRED  

  22. </prop> 

  23. <prop key="addLineItem"> 

  24. PROPAGATION_REQUIRED,-com.example.exception.FacadeException  

  25. </prop> 

  26. <prop key="getAllLineItems"> 

  27. PROPAGATION_REQUIRED,readOnly  

  28. </prop> 

  29. <prop key="queryNumberOfLineItems"> 

  30. PROPAGATION_REQUIRED,readOnly  

  31. </prop> 

  32. </props> 

  33. </property> 

  34. </bean> 

  35.  

  36. </beans> 

到此,關(guān)于“Spring AOP框架的作用和使用方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI