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

问:

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

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

答:

  1. <!--设置数据源   -->
  2. <bean   id= "dataSource "   class= "org.springframework.jndi.JndiObjectFactoryBean ">
  3. <property   name= "jndiName ">
  4. <value> <a href="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. <!--设置ibatis   -->
  8. <bean   id= "sqlMapClient "   class= "org.springframework.orm.ibatis.SqlMapClientFactoryBean ">
  9. <property   name= "configLocation ">
  10. <value> classpath:com/ayoa/bean/sqlmapdao/sql-map-config.xml </value>
  11. </property>
  12. <property   name= "dataSource ">
  13. <ref   bean= "dataSource "/>
  14. </property>
  15. </bean>
  16. <!--设置事务管理   -->
  17. <bean   id= "TransactionManager "   class= "org.springframework.jdbc.datasource.DataSourceTransactionManager ">
  18. <property   name= "dataSource ">
  19. <ref   bean= "dataSource "/>
  20. </property>
  21. </bean>
  22. <!--设置DAO   -->
  23. <bean   id= "VssDao "   class= "com.wehave.hyerp.productmanage.persistence.sqlmapdao.VssSqlMapDao ">
  24. <property   name= "sqlMapClient ">
  25. <ref   bean= "sqlMapClient "/>
  26. </property>
  27. </bean>
  28. <!--业务层交给spring进行事务管理   -->
  29. <bean   id= "VssService "   class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean ">
  30. <property   name= "transactionManager ">
  31. <ref   bean= "TransactionManager "> </ref>
  32. </property>
  33. <property   name= "target ">
  34. <bean   class= "com.wehave.hyerp.productmanage.service.VssService ">
  35. <property   name= "vssDao ">
  36. <ref   bean= "VssDao "/>
  37. </property>
  38. </bean>
  39. </property>
  40. <property   name= "transactionAttributes ">
  41. <props>
  42. <prop   key= "insertVss "> PROPAGATION_REQUIRED </prop>
  43. </props>
  44. </property>
  45. </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(千山鸟飞绝)的回贴,可以体现出我上面所说的东西。我明白这个原理,可是不知能否表达清楚。

 
 
上一篇:webpack配置技巧--路径


下一篇:洛谷 2234 [HNOI2002]营业额统计——treap(入门)