码迷,mamicode.com
首页 > 编程语言 > 详细

Spring基于声明的事务管理方式

时间:2015-10-09 00:47:48      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:spring   事务管理   声明式   

    基于注解的事务管理方式虽然使事务的管理变得很容易但是你还是需要把所有业务层的实现类都用@Transactional注解标记,那么有没有一种更为简单的以逸待劳的方法管理事务呢?

    基于声明的事务管理只需要少许的配置即可为所有业务层逻辑添加事务管理,在SpringMVC+Hibernate4+Bootstrap3基础上去除UserServiceImpl.java的@Transactional注解并修改applicationContext.xml为如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			    		http://www.springframework.org/schema/aop
						http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
						http://www.springframework.org/schema/tx 
						http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
						http://www.springframework.org/schema/context
				   		http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<context:property-placeholder location="classpath:db_info.properties"/>
	<aop:aspectj-autoproxy/>
	<!-- 只扫描被@Service @Repository注解标记的类 -->
	<context:component-scan base-package="com.zws" use-default-filters="false">
	  	<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" /> 
	    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" /> 
	</context:component-scan>
	
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${jdbc.driverClassName}"></property>
		<property name="jdbcUrl" value="${jdbc.url}"></property>
		<property name="user" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="checkoutTimeout" value="5000"></property>
		<property name="acquireIncrement" value="3"></property>
		<property name="maxIdleTime" value="60"></property>
		<property name="maxPoolSize" value="15"></property>
	</bean> 
	<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
	    <property name="dataSource" ref="dataSource"></property>
		<property name="hibernateProperties">
			<props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
                <prop key="hibernate.show_sql">true</prop>  
                <prop key="hibernate.format_sql">true</prop>  
                <prop key="hibernate.hbm2ddl.auto">update</prop>  
			</props>
		</property>
		<property name="packagesToScan">
			<list>
				<value>com.zws.user.beans</value>
			</list>
		</property>
	</bean>

	<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<!---->
	
<!-- 	   声明式容器事务管理 ,transaction-manager指定事务管理器为transactionManager  -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED" />
            <tx:method name="get*" propagation="REQUIRED" />
            <tx:method name="query*" propagation="REQUIRED" read-only="true" />
            <tx:method name="*" read-only="true" />
        </tx:attributes>
    </tx:advice>
    
    <!-- 只对业务逻辑层实施事务-->
    <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* com.zws..service.impl.*.*(..))" />
        <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
    </aop:config>
	
</beans>

    tx:advice用于定义一个增强,此处的增强为事务管理,aop:pointcut用于定义切点,aop:advisor标签将事务管理增强作用于指定切点,从而达到对切点进行增强的目的。    

本文出自 “埃文” 博客,请务必保留此出处http://wenshengzhu.blog.51cto.com/5151285/1701023

Spring基于声明的事务管理方式

标签:spring   事务管理   声明式   

原文地址:http://wenshengzhu.blog.51cto.com/5151285/1701023

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!