Spring中的开启事物的问题

关于Spring中的开启事物有两种方式:

一种是配置文件,一种是通过注解。

一种是通过接口来进行开启事物,代理类是通过jdk动态代理生成。

一种是通过自身类来开启事物,代理类是通过cblib技术来生成。

一种是通过jdbc,myBaist来实现事物,一种是hibernate3来实现事物。

(不知道上面的读者能听懂不?)

如何配置,网上例子很多,我只说一个问题:你配置完成以后,你确定该类就是能生成代理类吗?

-----------------------------------------------------

我以注解的配置来测试说明:

bean配置如下:

<!-- 扫描让注解的生效 -->
	<context:component-scan base-package="com.feng.*" />
	<context:annotation-config />
	
	<!-- 读取jdbc属性文件 -->						
	<context:property-placeholder location="classpath:db.properties"/>
	
	<!-- 配置数据源 -->
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${driverClass}"/>
		<property name="jdbcUrl" value="${jdbcUrl}"/>
		<property name="user" value="${user}"/>
		<property name="password" value="${password}"/>
		<property name="maxPoolSize" value="${maxPoolSize}"/>
		<property name="minPoolSize" value="${minPoolSize}"/>
		<property name="initialPoolSize" value="${initialPoolSize}"/>
	</bean>
	
	<!-- 注册一个jdbc模板对象,用于操作数据库 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	
	<bean id="userDao" class="com.feng.dao.UserDao">
		<property name="jdbcTemplate" ref="jdbcTemplate"/>
	</bean>

	<!-- 配置DataSourceTransactionManager 只是针对JDBC或者myBatis -->
	<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	    	<property name="dataSource" ref="dataSource" />
	</bean>


	
	<!-- 事务的注解驱动,支持事务注解 -->
	<tx:annotation-driven transaction-manager="txManager"/>

通过该段配置,并可以在类上通过注解,来设置事物了。测试类如下:

形式一:

package com.feng.service;
@Service
@Transactional
public class UserService {

}

测试如下:

       ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
@SuppressWarnings("unused")
UserService userService = (UserService) ctx.getBean("userService");
//userService.test();

System.out.println("ssssss");

单步调试结果说明:生成的userService不是代理类。


形式二:

package com.feng.service;
@Service
@Transactional
public class UserService {
public void test() {

}
}

单步调试说明:生成的userService是代理类。


结论:若想让开启的事物的是代理类(只有代理类才能实现事物),里面必须要有方法,这点在接口继承的时候一定要注解,父类接口也一定要加上@Transactional。


http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html(注解详细说明)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值