您的位置:首页 > 编程语言 > Java开发

Spring中TransactionProxyFactoryBean干啥的?为什么要配置这个东西?

2011-06-17 14:20 543 查看
问:

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

答:

<!--设置数据源   -->
<bean   id= "dataSource "   class= "org.springframework.jndi.JndiObjectFactoryBean ">
<property   name= "jndiName ">
<value> java: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(千山鸟飞绝)的回贴,可以体现出我上面所说的东西。我明白这个原理,可是不知能否表达清楚。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: