成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細剖析Spring AOP框架

開發 后端
這里介紹Spring AOP框架,Spring基于Inversion of Control(控制反轉)模式(也稱為依賴注入),它不僅可以連接組件服務,還可以連接關聯的事務上下文。

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

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

裝配組件事務

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

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

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

使用Spring進行事務管理

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

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

  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> 

【編輯推薦】

  1. Spring Hibernate簡單討論
  2. OSGi與Spring:設置Spring DM開發環境
  3. 使用Spring DM創建Hello World,以及OSGi服務
  4. Spring MVC總結:善用注解,生活更輕松
  5. 概括spring hibernate集成
責任編輯:佚名 來源: IT168
相關推薦

2022-06-07 07:58:45

SpringSpring AOP

2024-12-24 14:01:10

2009-09-03 15:03:27

C#實現AOP微型框架

2022-06-08 08:04:28

Springservicerepository

2009-06-19 14:49:43

Spring框架

2011-09-15 10:15:30

Spring

2023-02-01 09:15:41

2011-05-18 09:47:39

spring

2015-05-06 10:05:22

javajava框架spring aop

2009-08-27 17:14:36

C# Socket

2009-09-02 10:26:23

JSP和BEAN

2011-06-15 12:36:58

JSPBEAN

2009-11-04 16:40:47

AOP.NET Ora

2009-06-19 13:28:30

Spring AOPSpring 2.0

2023-01-30 11:35:14

SpringJava

2009-06-22 10:41:34

Spring.AOP

2022-02-17 13:39:09

AOP接口方式

2010-02-23 10:32:20

Python 腳本

2010-03-04 17:36:01

Linux系統分區

2010-03-15 14:58:58

交換技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人高清视频在线观看 | 日韩成人免费在线视频 | 久久久久久久久久久久久久久久久久久久 | 欧美激情黄色 | 国产视频观看 | 久久久91精品国产一区二区三区 | 久久久精彩视频 | 国产精品一区二区三区在线 | 日韩爱爱网站 | 91久久精品一区二区二区 | 一区二区三区观看视频 | 91精品久久久久久久久久小网站 | 国产免费一区二区 | 米奇成人网 | 国产成人免费视频网站高清观看视频 | 中文字幕亚洲欧美日韩在线不卡 | 日韩精品一区二区三区中文字幕 | 老外黄色一级片 | 黄色亚洲 | 亚洲精品福利在线 | 日韩成人中文字幕 | 欧美一级一 | 亚洲午夜精品 | 中文字幕视频在线看5 | 成人精品鲁一区一区二区 | 久久av一区二区 | 成人一区二区三区在线 | 91最新视频| 久久专区 | 国产乱人伦精品一区二区 | 精品国产三级 | 国产精品福利网站 | 久久精品视频在线播放 | 国产精品久久国产精品 | 黄色片在线网站 | 国产高清久久 | 一本久久a久久精品亚洲 | 亚洲综合婷婷 | 日本黄色高清视频 | 婷婷色在线 | 日韩二三区 |