`
leon.s.kennedy
  • 浏览: 111210 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

使用XML进行声明式事务管理

 
阅读更多

当多个方法需要事务时,可用XML方式,表达式可灵活配置

a)     xml(推荐,可以同时配置好多方法)

                i.          <bean txmanager

               ii.          <aop:config

1.     <aop:pointcut

2.     <aop:advisor pointcut-ref advice-ref

             iii.          <tx:advice: id transaction-manager = ...

 

 

 

<?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:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 <context:annotation-config />
 <context:component-scan base-package="org.spring"/>
 
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">

  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:3306/spring" />
  <property name="username" value="root" />
  <property name="password" value="root" />
 </bean>
  
 <bean id="mySessionFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="annotatedClasses">
   <list>
    <value>com.model.User</value>
    <value>com.model.Log</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>

 <bean id="txManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="mySessionFactory" />
 </bean>
 
 <aop:config>
     <aop:pointcut id="bussinesService"
           expression="execution(public * com.service..*.*(..))"/>
     <aop:advisor pointcut-ref="bussinesService" advice-ref="txAdvice"/>
   </aop:config>

 

 <tx:advice id="txAdvice" transaction-manager="txManager">
  <tx:attributes>
   <tx:method name="getUser" read-only="true" />
   <tx:method name="add*" />
  </tx:attributes>
 </tx:advice>
</beans>

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

txManager指定 使用什么事务类(Hibernate、JDBC、JPA……)

需要参考SessionFactory,从其中读取配置,ref="sessionFactory_id"

而SessionFactory用到了数据源,需参考数据源ID配置

 

aop:config指定切面配置

aop:pointcut定义切面,表达式

aop:advisor建议者,使用XXX建议,参考的是txAdvice,ref="txAdvice_id"

 

tx:advice指定事务的建议,需要指明是哪个事务类txManager

tx:attributes事务属性

tx:method 要在name为XXX的方法上,织入切面

如果不指定propagation 默认是 REQUERED

 

测试:

UserService类:

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

 public void add(User user) {
  Session session = sessionFactory.getCurrentSession();
  session.save(user);
  Log log = new Log();
  logDAO.save(log);
 }

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

Junit:

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

@Test
 public void testAdd() throws Exception {
  ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
  
  UserService service = (UserService)ctx.getBean("userService");
  service.add(new User());
    
 }

分享到:
评论

相关推荐

    Xml文件配置实现声明式事务管理

    在Spring框架中,声明式事务管理是一种非常重要的特性,它允许开发者通过XML配置或注解来定义事务的边界,而无需在业务代码中显式地管理事务。这种方式极大地提高了代码的可读性和可维护性。本篇文章将深入探讨如何...

    Spring使用XML配置声明式事务

    在Spring框架中,声明式事务管理是实现事务处理...在博文"Spring使用XML配置声明式事务"中,作者详细讲解了每个步骤,并可能通过示例代码展示了如何实际应用这些配置,帮助读者更好地理解和掌握Spring声明式事务管理。

    全面分析 Spring 的编程式事务管理及声明式事务管理

    1. **基于XML的声明式事务管理**: 在Spring的配置文件中,我们可以通过`&lt;tx:advice&gt;`、`&lt;aop:config&gt;`等元素定义事务的边界,指定哪些方法需要在事务中运行。 2. **基于注解的声明式事务管理**: 使用@Transactional...

    Spring 整合mybatis(注解&xml版声明式事务).pdf

    如果采用XML配置方式,则需要在Spring的XML配置文件中进行事务配置,并通过aop命名空间来定义事务通知及切点,从而实现声明式事务管理。 对于开发者而言,Spring与MyBatis的整合简化了事务和持久层的处理,减少了...

    spring声明式事务管理配置方式

    在提供的链接中,博主可能详细解释了这些概念,并给出了实际的应用示例,包括如何配置和使用声明式事务管理。通过阅读这个博客,你可以更好地理解Spring声明式事务管理的工作原理及其在实际项目中的应用。在压缩包...

    spring编程式事务与声明式事务详解

    Spring 提供了多种方式来实现声明式事务管理,例如使用 @Transactional 注解或使用 XML 配置文件。 总结 本文通过详细分析 Spring 的编程式事务管理及声明式事务管理,帮助读者理解事务管理的重要性和实现方式。...

    全面分析_Spring_的编程式事务管理及声明式事务管理.

    Spring提供了一套基于TaskExecutor的异步任务处理机制,结合@Transactional注解,可以在异步执行的代码块中使用声明式事务管理。但这需要开发者对异步执行的事务特性有充分理解,因为事务的同步特性可能会受到影响。...

    基于java的企业级应用开发:声明式事务管理.ppt

    本篇内容主要涉及两种声明式事务管理方式:基于XML和基于Annotation。 1. **基于XML的声明式事务管理** 这种方式是通过在Spring的配置文件中使用`&lt;tx:advice&gt;`元素来定义事务规则。`&lt;tx:advice&gt;`是事务增强处理的...

    注解实现声明式事务管理

    在Spring中,主要使用以下几种注解来实现声明式事务管理: 1. `@Transactional`:这是最常用的注解,用在方法上,表示该方法在一个事务上下文中执行。它包含了一些可选属性,如`propagation`(事务传播行为)、`...

    Spring 2.5整合iBATIS 2.3并使用Spring的声明式事务管理

    7. **声明式事务管理**:Spring提供了声明式事务管理,我们可以在方法级别或类级别通过@Transactional注解来控制事务的边界。例如: ```java @Service public class UserService { @Autowired private UserMapper...

    全面分析_Spring_的编程式事务管理及声明式事务管理

    本教程将深入探讨 Spring 的编程式事务管理和声明式事务管理,帮助你理解这两种方式的差异与应用场景。 首先,编程式事务管理依赖于编程的方式显式地控制事务的开始、提交、回滚等操作。它通过实现 `...

    spring+mybatis的声明式事务

    Spring提供两种事务管理方式:编程式事务管理和声明式事务管理。编程式事务管理通过编写代码来控制事务的开始、提交、回滚等操作,灵活性高但侵入性强。相比之下,声明式事务管理则更加简洁,它通过配置或注解来...

    使用Spring的声明式事务----Annotation注解方式

    以上就是Spring中使用Annotation进行声明式事务管理的基本知识。通过这种方式,我们可以轻松地在应用程序中实现事务管理,同时避免了手动管理事务的繁琐。在实际项目中,合理利用这些特性能够极大地提升代码的可读性...

    声明式事务处理 SSh

    相较于编程式事务管理,声明式事务处理更加简洁、易于维护,它将事务管理与业务逻辑解耦,使开发者可以专注于业务代码的编写。 声明式事务处理的核心在于XML配置或注解方式来定义事务的边界。在Spring框架中,主要...

    Spring声明式事务配置管理方法

    Spring 声明式事务管理是Spring框架中的一个重要特性,它允许开发者在不编写任何事务管理代码的情况下,通过配置来管理事务。这种方式极大地简化了事务处理,并提高了代码的可维护性。以下是关于Spring声明式事务...

    spring声明式事务配置

    声明式事务管理通过XML配置或注解的形式定义事务边界,使得业务逻辑与事务控制分离。 ### 描述分析:XML配置示例 提供的XML配置示例展示了如何在Spring中配置声明式事务。具体来说,该示例包括以下几个关键组件: ...

    springmvc+mybatis+声明式事务管理

    在IT行业中,SpringMVC、MyBatis以及声明式事务管理是Java Web开发中的关键组件。这个项目结合了这三个核心技术,构建了一个高效、稳定的后端系统。以下将详细阐述这些技术及其相互配合的工作原理。 首先,...

    spring声明式事务.zip

    在实际项目中,推荐结合使用基于XML和注解的声明式事务管理。对于事务管理的核心逻辑,如事务传播行为和隔离级别,可以在XML配置中统一定义,而对于具体业务方法的事务控制,可以使用注解进行精细化管理。 总结来...

Global site tag (gtag.js) - Google Analytics