首页 > 代码库 > Spring中的TransactionProxyFactoryBean作用及配置(转)

Spring中的TransactionProxyFactoryBean作用及配置(转)

问:

 

原文链接 http://blog.csdn.net/cpp_lzth/article/details/6551703

看AOP的时候发现spring中有个org.springframework.transaction.interceptor.TransactionProxyFactoryBean.还有这里为什么要配置这个类呢???

 

 

答:

 

[xhtml] view plain copy
 
  1. <!--设置数据源   -->   
  2. <bean   id= "dataSource "   class= "org.springframework.jndi.JndiObjectFactoryBean ">     
  3. <property   name= "jndiName ">     
  4. <value<href=http://www.mamicode.com/"http://lib.csdn.net/base/javase" class=‘replace_word‘ title="Java SE知识库" target=‘_blank‘ style=‘color:#df3434; font-weight:bold;‘>Java</a>:comp/env/jdbc/ayoa </value>     
  5. </property>     
  6. </bean>   
  7.   
  8. <!--设置ibatis   -->   
  9. <bean   id= "sqlMapClient "   class= "org.springframework.orm.ibatis.SqlMapClientFactoryBean ">   
  10. <property   name= "configLocation ">   
  11. <value> classpath:com/ayoa/bean/sqlmapdao/sql-map-config.xml </value>   
  12. </property>   
  13. <property   name= "dataSource ">   
  14. <ref   bean= "dataSource "/>   
  15. </property>   
  16. </bean>     
  17.   
  18. <!--设置事务管理   -->   
  19. <bean   id= "TransactionManager "   class= "org.springframework.jdbc.datasource.DataSourceTransactionManager ">   
  20. <property   name= "dataSource ">   
  21. <ref   bean= "dataSource "/>   
  22. </property>   
  23. </bean>     
  24.   
  25. <!--设置DAO   -->   
  26. <bean   id= "VssDao "   class= "com.wehave.hyerp.productmanage.persistence.sqlmapdao.VssSqlMapDao ">   
  27. <property   name= "sqlMapClient ">   
  28. <ref   bean= "sqlMapClient "/>   
  29. </property>   
  30. </bean>   
  31.   
  32. <!--业务层交给spring进行事务管理   -->   
  33. <bean   id= "VssService "   class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean ">   
  34. <property   name= "transactionManager ">   
  35. <ref   bean= "TransactionManager "</ref>   
  36. </property>   
  37. <property   name= "target ">   
  38. <bean   class= "com.wehave.hyerp.productmanage.service.VssService ">   
  39. <property   name= "vssDao ">   
  40. <ref   bean= "VssDao "/>   
  41. </property>   
  42. </bean>   
  43. </property>   
  44.   
  45. <property   name= "transactionAttributes ">   
  46. <props>   
  47. <prop   key= "insertVss "> PROPAGATION_REQUIRED </prop>   
  48. </props>   
  49. </property>   
  50. </bean>   

 

 

 

问:

这个跟直接把DAO交给控制层有什么区别??? 

为什么还要用TransactionProxyFactoryBean来包住DAO呢??? 

TransactionProxyFactoryBean又不是自己写的Manager类,又有何功能实现事务控制呢???

 

答:

     配置这个类,是为了现宽广地实现事务的管理,也可以说是为了要和hibenate结合起来,TransactionProxyFactoryBean这个类一般有三个构造参数要注入,一个是hibernate的sessionFactory,这是为了spring可以和hibernate结合,第二个是用户的DAO类,而这个DAO类本身也需要把hibernate的sessionFactory作为构造参数注入到它的父类的构造函数中。第三个注入的,其实是事务管理的策略,通过AOP的方式实现的,例如DAO类中有有insert(String   sql);update(String   sql);delelte(String   sql);三个方法,我们可以设定当insert执行时如果抛出异常,就执行rollback等操作。楼主对照rickhunterchen(千山鸟飞绝)的回贴,可以体现出我上面所说的东西。我明白这个原理,可是不知能否表达清楚。

 
 

Spring中的TransactionProxyFactoryBean作用及配置(转)