`

Spring学习 -TransactionProxyFactoryBean事务

阅读更多
applicationContext.xml
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="driverClass" value="com.mysql.jdbc.Driver"/>
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/asl_daily_report" />
		<property name="user" value="root" />
		<property name="password" value="" />
		<property name="maxPoolSize" value="40"/>
		<property name="minPoolSize" value="1"/>
		<property name="initialPoolSize" value="1"/>
		<property name="maxIdleTime" value="20"/>
	</bean>
	<bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	<bean id="newsDao" class="org.crazyit.app.dao.impl.NewsDaoImpl">
		<property name="ds" ref="dataSource"/>
	</bean>
	<bean id="newsDaoTrans" class= "org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager" ref="transactionManager"/> 
		<property name="target" ref="newsDao"/>
		<property name="transactionAttributes"> 
			<props> 
				<prop key="*">PROPAGATION_REQUIRED,-DataAccessException</prop> 
			</props>
		</property>
	</bean> 



NewsDao.java
package org.crazyit.app.dao;
import org.springframework.dao.DataAccessException;
public interface NewsDao {
	public void insert(String title, String content) throws DataAccessException;
}



NewsDaoImpl.java
package org.crazyit.app.dao.impl;
import javax.sql.DataSource;
import org.crazyit.app.dao.NewsDao;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
public class NewsDaoImpl implements NewsDao {
	private DataSource ds;
	public void setDs(DataSource ds) {
		this.ds = ds;
	}
	public void insert(String title, String content) throws DataAccessException {
		JdbcTemplate jt = new JdbcTemplate(ds);
		jt.update("insert into news_inf  values(null , ? , ?)", title, content);
		jt.update("insert into news_inf  values(null , ? , ?)", title, content);
	}
}



测试代码:
ApplicationContext ctx = new ClassPathXmlApplicationContext( "applicationContext.xml");
		NewsDao dao = (NewsDao) ctx.getBean("newsDaoTrans", NewsDao.class);
		try {
			dao.insert("Java", "Spring2 Of J2EE");
		} catch (Exception e) {
			System.out.println(e.getClass().getSimpleName());
		}


输入出:DuplicateKeyException
同时事务没有提交,而是回滚。

分享到:
评论

相关推荐

    Spring使用TransactionProxyFactoryBean声明式事务配置实例

    TransactionProxyFactoryBean是Spring提供的一种工具,用于创建带有事务策略的对象代理,它是基于动态代理实现的,能够帮助我们将事务管理逻辑与业务代码分离,提高代码的可维护性和可测试性。 首先,让我们了解...

    spring 事务管理例子(TransactionProxyFactoryBean代理机制 和 tx/aop)

    总结来说,本例子通过`TransactionProxyFactoryBean`和`@Transactional`展示了如何在Spring中实现声明式事务管理,这两种方式都利用了AOP来封装事务逻辑,使代码更加整洁,降低了事务管理的复杂性。在实际应用中,...

    MyBatis与spring的整合-添加事务-src.zip

    **配置TransactionManager**:创建PlatformTransactionManager Bean,MyBatis与Spring整合时通常使用SqlSessionTemplate或者MyBatis的SqlSessionInterceptor配合Spring的TransactionProxyFactoryBean来实现事务管理...

    spring-orm源码

    Spring提供了声明式事务管理,允许开发者在配置文件中定义事务边界,而无需在代码中显式处理。源码中,你可以看到TransactionProxyFactoryBean和PlatformTransactionManager是如何协同工作的,它们是如何实现事务的...

    spring-framework-3.0.5.RELEASE-src

    3.0.5.RELEASE版本支持编程式和声明式事务管理,源代码中可以学习到TransactionProxyFactoryBean、PlatformTransactionManager等类的工作原理,以及如何使用@Transactional注解进行事务控制。 最后,Spring的测试...

    spring学习事务源码

    3. **TransactionProxyFactoryBean** 或者 `@EnableTransactionManagement`:用于创建代理对象,拦截带有@Transactional的方法并管理事务。 在源码分析中,我们可以看到当一个方法被@Transactional标记后,Spring会...

    spring-framework-3.1.4.RELEASE源码

    5. **事务管理**:探索 TransactionProxyFactoryBean 和 PlatformTransactionManager 接口,理解 Spring 如何实现事务的声明式和编程式管理。 6. **模版类的内部工作**:查看 RestTemplate 和 JdbcTemplate 的源码...

    Spring事务原理、Spring事务配置的五种方式

    Spring事务原理和配置 Spring事务原理是指Spring框架中的一种机制,用于管理事务,并提供了多种配置方式。事务是指一系列的操作,作为一个整体执行,如果其中某个操作失败,整个事务将回滚。Spring事务原理围绕着两...

    spring基于AOP实现事务

    本文将深入探讨如何基于AOP(面向切面编程)来实现Spring的事务管理,特别是通过TransactionProxyFactoryBean。让我们一起探索这个主题。 首先,了解什么是AOP。AOP是Spring框架的核心特性,它允许我们在不修改业务...

    spring-framework-2.5.6

    2. 事务管理:Spring的声明式事务管理是通过AOP实现的,通过@Transactional注解可以实现事务的自动开启和提交。查看TransactionProxyFactoryBean的源码,可以深入理解这一过程。 五、安全升级 Spring 2.5.6.SEC02是...

    Spring源代码解析(六):Spring声明式事务处理.doc

    在 Spring 中,声明式事务处理可以通过配置 TransactionProxyFactoryBean 来实现。TransactionProxyFactoryBean 是一个 FactoryBean,它可以创建一个代理对象,该代理对象可以拦截业务方法的调用,并对事务进行管理...

    Spring事务配置的五种方式

    Spring 事务管理是其核心特性之一,用于确保在执行数据库操作时的一致性和可靠性。它提供了五种不同的配置方式来适应不同的应用场景。以下是对这些配置方式的详细解释: 1. **基于代理的事务管理(Proxy-based ...

    声明式事务控制spring+hibernate集成

    在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate的SessionFactory和SessionFactoryBuilder上使用Spring的TransactionProxyFactoryBean来创建...

    spring2.0声明式事务

    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt; *"&gt;PROPAGATION_REQUIRED,readOnly *"&gt;PROPAGATION_REQUIRED,readOnly *"&gt;PROPAGATION_REQUIRED,readOnly *"&gt;...

    spring声明式事务配置

    根据提供的信息,我们可以深入探讨Spring框架中的声明式事务配置及其多种实现方式。声明式事务管理是一种简化事务管理的方式,它允许开发人员通过配置而非编程来指定事务边界,从而减少了代码的复杂性并提高了可维护...

    Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作示例

    `TransactionProxyFactoryBean` 是Spring提供的一种工具,用于创建带有事务管理功能的代理对象,使得业务逻辑对象能够透明地参与到事务处理中。本示例将详细解析如何使用`TransactionProxyFactoryBean`进行声明式...

    spring事务配置的5中方式

    Spring 事务配置是Spring框架中不可或缺的一部分,它用于管理和协调应用程序中的事务边界,确保数据的一致性和完整性。在Spring中,事务配置主要涉及到三个核心组件:DataSource、TransactionManager和代理机制。...

    Spring的事务配置的五种方式

    Spring框架在处理事务时提供了五种不同的配置方式,这些配置主要涉及到事务的声明式管理和编程式管理。在Spring中,事务管理通常分为三部分:DataSource、TransactionManager和代理机制。DataSource是数据源,...

Global site tag (gtag.js) - Google Analytics