Spring中的TransactionProxyFactoryBean作用及配置(转)
2017-04-13 11:55
441 查看
问:
原文链接 http://blog.csdn.net/cpp_lzth/article/details/6551703
看AOP的时候发现spring中有个org.springframework.transaction.interceptor.TransactionProxyFactoryBean.还有这里为什么要配置这个类呢???
答:
[xhtml] view plain copy
<!--设置数据源 -->
<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>
<!--设置ibatis -->
<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>
<!--设置DAO -->
<bean id= "VssDao " class= "com.wehave.hyerp.productmanage.persistence.sqlmapdao.VssSqlMapDao ">
<property name= "sqlMapClient ">
<ref bean= "sqlMapClient "/>
</property>
</bean>
<!--业务层交给spring进行事务管理 -->
<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>
问:
这个跟直接把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(千山鸟飞绝)的回贴,可以体现出我上面所说的东西。我明白这个原理,可是不知能否表达清楚。
原文链接 http://blog.csdn.net/cpp_lzth/article/details/6551703
看AOP的时候发现spring中有个org.springframework.transaction.interceptor.TransactionProxyFactoryBean.还有这里为什么要配置这个类呢???
答:
[xhtml] view plain copy
<!--设置数据源 -->
<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>
<!--设置ibatis -->
<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>
<!--设置DAO -->
<bean id= "VssDao " class= "com.wehave.hyerp.productmanage.persistence.sqlmapdao.VssSqlMapDao ">
<property name= "sqlMapClient ">
<ref bean= "sqlMapClient "/>
</property>
</bean>
<!--业务层交给spring进行事务管理 -->
<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>
问:
这个跟直接把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)
- Spring中TransactionProxyFactoryBean干啥的?为什么要配置这个东西?
- spring使用TransactionProxyFactoryBean配置事务
- 8.5.2: Spring的事务---使用TransactionProxyFactoryBean创建事务代理
- 用TransactionProxyFactoryBean实现spring的声明式事务
- 用TransactionProxyFactoryBean实现spring的声明式事务
- Spring的ProxyFactoryBean和BeanNameAutoProxyCreator的配置
- [org.springframework.transaction.interceptor.TransactionProxyFactoryBean] depends on not found;
- 使用TransactionProxyFactoryBean及abstract属性来简化配置 【声明式事务配置方法】
- 用TransactionProxyFactoryBean实现spring的声明式事务
- spring声明式事务管理(基于TransactionProxyFactoryBean的方式)
- TransactionProxyFactoryBean用继承简化配置
- Spring 声明式事务管理----基于TransactionProxyFactoryBean的方式
- 用TransactionProxyFactoryBean实现spring的声明式事务
- TransactionProxyFactoryBean spring事务代理的工程bean API讲解/翻译
- Spring事务管理----声明式:利用TransactionProxyFactoryBean生成事务代理
- Spring事务——使用TransactionProxyFactoryBean创建事务代理
- TransactionProxyFactoryBean 配置问题
- 用TransactionProxyFactoryBean实现spring的声明式事务
- Spring的ProxyFactoryBean和BeanNameAutoProxyCreator的配置