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

 

问:

 

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

 

 

答:

 

 

问:

这个跟直接把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(千山鸟飞绝)的回贴,可以体现出我上面所说的东西。我明白这个原理,可是不知能否表达清楚。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用HibernateSpring的事务管理器时,可以使用TransactionProxyFactoryBean和DataSourceTransactionManager两个类。在配置时,需要在Spring配置文件定义TransactionProxyFactoryBean,并将其与DataSourceTransactionManager关联。 具体配置步骤如下: 1. 配置数据源 在Spring配置文件,需要配置数据源。例如: ```xml <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> ``` 2. 配置事务管理器 在Spring配置文件,需要配置DataSourceTransactionManager作为事务管理器。例如: ```xml <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> ``` 3. 配置TransactionProxyFactoryBean 在Spring配置文件,需要配置TransactionProxyFactoryBean,它用于创建代理对象并将事务管理器与代理对象关联。例如: ```xml <bean id="userService" class="com.example.UserService"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="com.example.UserDao"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="txProxyTemplate" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="target" ref="userService"/> <property name="proxyInterfaces" value="com.example.UserService"/> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> ``` 在上面的配置,txProxyTemplate是一个TransactionProxyFactoryBean对象,它将userService作为目标对象,并将其与transactionManager关联。同时,它还指定了代理对象要实现的接口和事务属性。 4. 使用代理对象 在使用事务时,需要使用TransactionProxyFactoryBean创建的代理对象。例如: ```java ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); UserService userService = (UserService) context.getBean("txProxyTemplate"); userService.updateUser(user); ``` 以上就是HibernateSpring同时使用TransactionProxyFactoryBean和DataSourceTransactionManager事务管理器的配置方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值