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

Spring中的四種聲明式事務的配置

開發 后端
本文介紹Spring中的四種聲明式事務的配置Spring容器中有兩種思想很重要,也就是我們常用的Ioc和Aop。

如果理解了這兩種思想,對于我們學習設計模式和編程有很大的幫助,美國四人幫(GOF)寫的設計模式中,有很多都用到了Ioc的思想。簡單的說就是依賴注入的思想。常見的一種情況:如果一個類中要復用另外一個類中的功能時,我們可能會首先想到繼承,如果你知道Ioc這種思想的話,我想你不會用繼承,你會馬上想到把要用到功能抽取出來,在我們要用到的類中只需通過set方法簡單的注入就可以了,其實這里用到了對象的組合代替繼承,這樣不僅避免了單一繼承,還很好的實現了松耦合。同時也遵循了面向對象的編程的設計原則:多用組合,少用繼承。在這里對于Ioc和Aop這兩種思想的好處。我就不介紹了。接下來我要說的是Spring中幾種常見的事務配置,是Aop和Ioc的充分體現。

在說點題外話,以前EJB在J2EE中開發中可是大名鼎鼎的了。就是因為EJB提供了很多服務,而不需要我們去開發了,其中用到最多的算是它提供的聲明式事務了。在Spring沒有出現之前,EJB在J2EE開發中扮演著非常重要的角色。同時也是很多項目失敗的罪魁禍首。其中的原因就是因為它是重量級,強侵入性收費的框架。需要昂貴的服務器支持,在加上它的測試更是讓人頭痛。而Spring恰恰與它相反。Spring是一個輕量級的,非侵入性的開源框架。它提供的聲明式事務的功能更是強大,不需要容器的支持。這一點吸引力很多人愿意放棄EJB而使用Spring.讓我們言歸正傳吧。

以下兩個bean的配置是下面要用到的。

  1.  
  2.      <bean id="transactionManager" 
  3. class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
  4.       <property name="sessionFactory"> 
  5.        <ref local="sessionFactory" /> 
  6.       property> 
  7.      bean> 
  8.      
  9.      <bean id="fundService" 
  10. class="com.jack.fund.service.serviceimpl.FundService"> 
  11.       <property name="operdao"> 
  12.        <ref bean="operatorDAO" /> 
  13.       property> 
  14.       <property name="producedao"> 
  15.        <ref bean="fundProduceDAO" /> 
  16.       property> 
  17.       <property name="customerdao"> 
  18.        <ref bean="customerDAO" /> 
  19.       property> 
  20.       <property name="accountdao"> 
  21.        <ref bean="accountDAO" /> 
  22.       property> 
  23.       <property name="fundaccountdao"> 
  24.        <ref bean="fundAccountDAO" /> 
  25.       property> 
  26.       <property name="fundtransdao"> 
  27.        <ref bean="fundTransDAO" /> 
  28.       property> 
  29.      bean> 

可能還有其他很多模塊。可能只是其中的模塊。

***種:配置聲明式事務的方法如下。也是我們最常用的方法了,它適用于你的庫表比較少的情況下。

  1. <bean id="fundServiceDAOProxy" 
  2. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
  3.  
  4. <property name="transactionManager"> 
  5. <ref bean="transactionManager" /> 
  6. property> 
  7.  
  8. <property name="proxyTargetClass"> 
  9. <value>falsevalue> 
  10. property> 
  11. <property name="proxyInterfaces"> 
  12. <value>com.jack.fund.service.IFundServicevalue> 
  13. property> 
  14.  
  15. <property name="target"> 
  16. <ref bean="fundService" /> 
  17. property> 
  18.  
  19. <property name="transactionAttributes"> 
  20. <props> 
  21. <prop key="delete*">PROPAGATION_REQUIREDprop> 
  22. <prop key="add*">PROPAGATION_REQUIREDprop> 
  23. <prop key="update*">PROPAGATION_REQUIREDprop> 
  24. <prop key="save*">PROPAGATION_REQUIREDprop> 
  25. <prop   key="find*">PROPAGATION_REQUIRED,readOnlyprop> 
  26. props> 
  27. property> 
  28. bean> 

以下可能還有其他的xxxServiceDAOProxy.大家可以看出針對每一個功能模塊配置一個業務代理服務。如果模塊多大話,就顯得代碼有點多了,發現他們只是稍微一點不一樣。這時我們就應該想到繼承的思想。用第二種方法。

第二種:配置聲明式事務的方法如下。這種情況適合相對比較多的模塊時使用。

  1.  
  2. <bean id="transactionBase" 
  3. class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" 
  4. lazy-init="true" abstract="true"> 
  5.  
  6. <property name="transactionManager"> 
  7. <ref bean="transactionManager" /> 
  8. property> 
  9.  
  10. <property name="transactionAttributes"> 
  11. <props> 
  12. <prop key="delete*">PROPAGATION_REQUIREDprop> 
  13. <prop key="add*">PROPAGATION_REQUIREDprop> 
  14. <prop key="update*">PROPAGATION_REQUIREDprop> 
  15. <prop key="save*">PROPAGATION_REQUIREDprop> 
  16. <prop key="find*">PROPAGATION_REQUIRED,readOnlyprop> 
  17. props> 
  18. property> 
  19. bean> 
  20. 而具體的模塊可以簡單的這樣配置。只要指明它的parent(父類)就可以了。父類一般把abstract="true",因為在容器加載的時候不需要初始化,等到用的時候再有它的子類調用的時候,再去初始化。  
  21. <bean id="fundServiceDAOProxy" parent="transactionBase" > 
  22. <property name="target"> 
  23. <ref bean="fundService" /> 
  24. property> 
  25. bean> 

這樣配置的話,如果有多個像fundService這樣模塊時,可以少些很多重復的代碼。

第三種:配置聲明式事務的方法如下。主要利用BeanNameAutoProxyCreator自動創建事務代理

  1. <bean id="transactionInterceptor" 
  2. class="org.springframework.transaction.interceptor.TransactionInterceptor"> 
  3. <property name="transactionManager"> 
  4. <ref bean="transactionManager" /> 
  5. property> 
  6.  
  7. <property name="transactionAttributes"> 
  8. <props> 
  9. <prop key="delete*">PROPAGATION_REQUIREDprop> 
  10. <prop key="add*">PROPAGATION_REQUIREDprop> 
  11. <prop key="update*">PROPAGATION_REQUIREDprop> 
  12. <prop key="save*">PROPAGATION_REQUIREDprop> 
  13. <prop key="find*">PROPAGATION_REQUIRED,readOnlyprop> 
  14. props> 
  15. property> 
  16. bean> 
  17. <bean 
  18. class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 
  19. <property name="beanNames"> 
  20. <list> 
  21. <value>fundServicevalue> 
  22. list> 
  23. property> 
  24. <property name="interceptorNames"> 
  25. <list> 
  26. <value>transactionInterceptorvalue> 
  27. list> 
  28. property> 
  29. bean> 

這種方法主要利用了攔截器的原理。

前三種方法一般都必需指定具體的模塊bean.如果模塊過多話,比如一個大型的網站一般有幾十個模塊。我們就得考慮用第四種的配置方式了。自動創建事務代理的方式了。

第四種:配置聲明式事務的方法如下。

  1. <bean id="transactionInterceptor" 
  2. class="org.springframework.transaction.interceptor.TransactionInterceptor"> 
  3. <property name="transactionManager"> 
  4. <ref bean="transactionManager" /> 
  5. property> 
  6.  
  7. <bean id="autoproxy" 
  8. class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 
  9.  
  10. <property name="beanNames"> 
  11. <list> 
  12. <value>*Servicevalue> 
  13. list> 
  14. property> 
  15. <property name="interceptorNames"> 
  16. <list> 
  17. <value>transactionInterceptorvalue> 
  18. list> 
  19. property> 
  20. bean> 

自動代理還有一種用法就是結合正規表達式和advice使用。

  1. <bean id="transactionInterceptor" 
  2. class="org.springframework.transaction.interceptor.TransactionInterceptor"> 
  3. <property name="transactionManager"> 
  4. <ref bean="transactionManager" /> 
  5. property> 
  6. <bean id="autoProxyCreator" 
  7. class="org.springframework.aop.framework.autoproxy.DefaultAdvisor                                                       AutoProxyCreator" /> 
  8. <bean id="regexpMethodPointcutAdvisor" 
  9. class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> 
  10. <property name="advice"> 
  11. <ref bean="transactionInterceptor" /> 
  12. property> 
  13. <property name="pattern"> 
  14. <value>.*value> 
  15. property> 
  16. bean> 

【編輯推薦】

  1. Spring控制反轉(IoC)容器
  2. Spring is coming
  3. 在Spring中進行集成測試
  4. Spring中的TopLink ServerSession
  5. Spring聲明式事務
責任編輯:佚名 來源: 中國IT實驗室
相關推薦

2009-06-22 09:01:57

Spring聲明式事務

2020-06-17 08:31:10

權限控制Spring Secu

2021-07-27 10:49:10

SpringSecurity權限

2010-08-06 14:28:55

Flex CSS樣式

2019-10-24 07:42:28

Java引用GC

2024-11-13 19:03:14

2023-05-22 08:03:28

JavaScrip枚舉定義

2017-08-09 14:34:12

MysqlJavaPython

2011-11-25 10:25:27

SpringJava

2009-06-19 18:26:38

Spring事務配置

2011-02-28 13:51:30

Spring事物配置

2021-09-06 13:42:14

Spring聲明式事務

2023-10-26 09:02:30

框架設計模式

2021-12-22 09:34:01

Golagn配置方式

2025-01-15 12:43:23

2011-11-24 16:34:39

Java

2011-12-30 13:15:53

Java

2021-08-25 12:55:33

Linuxcron

2017-07-06 15:40:19

DevOps核心能力

2012-09-11 09:55:26

編程HTML5編程能力
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美国产精品一区二区 | 亚洲在线视频 | 亚洲视频免费观看 | 久久av资源网| 亚洲国产高清在线 | 亚洲视频在线播放 | 日韩a| 精品国产视频 | 在线高清免费观看视频 | 美女黄网站| 九九免费视频 | 日韩精品一区二区三区中文在线 | 精品亚洲一区二区 | 91久久久久久 | 国产中文 | 色综合天天综合网国产成人网 | 在线观看视频91 | 91精品国产综合久久国产大片 | 人人干人人看 | 色久伊人 | 欧美日韩在线观看视频网站 | 久久1区| 精品在线免费观看视频 | 久久噜 | 一级做a爰片性色毛片视频停止 | 亚洲一区电影 | 久久人人网| 亚洲精品电影在线 | 91精品久久久久久久久久 | 亚洲精品一区中文字幕 | 伊人艹| 国内精品99 | 欧美另类视频在线 | 久久精品国产久精国产 | 中文字幕乱码亚洲精品一区 | 爱爱免费视频 | 久久伊人精品 | 成人在线免费观看视频 | 国产精品久久久久久久久久久免费看 | 久久国产成人 | 一级片在线播放 |