问:html
原文连接
http://blog.csdn.net/cpp_lzth/article/details/6551703
看AOP的时候发现spring中有个org.springframework.transaction.interceptor.TransactionProxyFactoryBean.还有这里为何要配置这个类呢???java
答:spring
- <bean id= "dataSource " class= "org.springframework.jndi.JndiObjectFactoryBean ">
- <property name= "jndiName ">
- <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>
- </property>
- </bean>
-
- <bean id= "sqlMapClient " class= "org.springframework.orm.ibatis.SqlMapClientFactoryBean ">
- <property name= "configLocation ">
- <value> classpath:com/ayoa/bean/sqlmapdao/sql-map-config.xml </value>
- </property>
- <property name= "dataSource ">
- <ref bean= "dataSource "/>
- </property>
- </bean>
-
- <bean id= "TransactionManager " class= "org.springframework.jdbc.datasource.DataSourceTransactionManager ">
- <property name= "dataSource ">
- <ref bean= "dataSource "/>
- </property>
- </bean>
-
- <bean id= "VssDao " class= "com.wehave.hyerp.productmanage.persistence.sqlmapdao.VssSqlMapDao ">
- <property name= "sqlMapClient ">
- <ref bean= "sqlMapClient "/>
- </property>
- </bean>
-
- <bean id= "VssService " class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean ">
- <property name= "transactionManager ">
- <ref bean= "TransactionManager "> </ref>
- </property>
- <property name= "target ">
- <bean class= "com.wehave.hyerp.productmanage.service.VssService ">
- <property name= "vssDao ">
- <ref bean= "VssDao "/>
- </property>
- </bean>
- </property>
-
- <property name= "transactionAttributes ">
- <props>
- <prop key= "insertVss "> PROPAGATION_REQUIRED </prop>
- </props>
- </property>
- </bean>
问:sql
这个跟直接把DAO交给控制层有什么区别???
为何还要用TransactionProxyFactoryBean来包住DAO呢???
TransactionProxyFactoryBean又不是本身写的Manager类,又有何功能实现事务控制呢???session
答:函数
配置这个类,是为了现宽广地实现事务的管理,也能够说是为了要和hibenate结合起来,TransactionProxyFactoryBean这个类通常有三个构造参数要注入,一个是hibernate的sessionFactory,这是为了spring能够和hibernate结合,第二个是用户的DAO类,而这个DAO类自己也须要把hibernate的sessionFactory做为构造参数注入到它的父类的构造函数中。第三个注入的,实际上是事务管理的策略,经过AOP的方式实现的,例如DAO类中有有insert(String sql);update(String sql);delelte(String sql);三个方法,咱们能够设定当insert执行时若是抛出异常,就执行rollback等操做。楼主对照rickhunterchen(千山鸟飞绝)的回贴,能够体现出我上面所说的东西。我明白这个原理,但是不知可否表达清楚。spa