`
webook_java
  • 浏览: 59004 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

Spring几种事物配置

阅读更多
1、每个bean都有一个代理
<?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"
    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">

    <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>  

    <!-- 定义事务管理器(声明式的事务) -->  
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <!-- 配置DAO -->
    <bean id="userDaoTarget" class="com.test.spring.dao.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <bean id="userDao"  
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
           <!-- 配置事务管理器 -->  
           <property name="transactionManager" ref="transactionManager" />     
        <property name="target" ref="userDaoTarget" />  
         <property name="proxyInterfaces" value="com.test.spring.dao.GeneratorDao" />
        <!-- 配置事务属性 -->  
        <property name="transactionAttributes">  
            <props>  
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>  
        </property>  
    </bean>  
</beans>

2、所有bean共享一个代理基类
<?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"
    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">

    <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>  

    <!-- 定义事务管理器(声明式的事务) -->  
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <bean id="transactionBase"  
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
            lazy-init="true" abstract="true">  
        <!-- 配置事务管理器 -->  
        <property name="transactionManager" ref="transactionManager" />  
        <!-- 配置事务属性 -->  
        <property name="transactionAttributes">  
            <props>  
                <prop key="*">PROPAGATION_REQUIRED</prop>  
            </props>  
        </property>  
    </bean>    
   
    <!-- 配置DAO -->
    <bean id="userDaoTarget" class="com.test.spring.dao.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <bean id="userDao" parent="transactionBase" >  
        <property name="target" ref="userDaoTarget" />   
    </bean>
</beans>

3、使用拦截器
<?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"
    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">

    <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>  

    <!-- 定义事务管理器(声明式的事务) -->  
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean> 
   
    <bean id="transactionInterceptor"  
        class="org.springframework.transaction.interceptor.TransactionInterceptor">  
        <property name="transactionManager" ref="transactionManager" />  
        <!-- 配置事务属性 -->  
        <property name="transactionAttributes">  
            <props>  
                <prop key="*">PROPAGATION_REQUIRED</prop>  
            </props>  
        </property>  
    </bean>
      
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
        <property name="beanNames">  
            <list>  
                <value>*Dao</value>
            </list>  
        </property>  
        <property name="interceptorNames">  
            <list>  
                <value>transactionInterceptor</value>  
            </list>  
        </property>  
    </bean>  
  
    <!-- 配置DAO -->
    <bean id="userDao" class="com.test.spring.dao.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>

4、使用tx标签配置拦截器

<?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="com.test" />

    <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>  

    <!-- 定义事务管理器(声明式的事务) -->  
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <aop:pointcut id="interceptorPointCuts"
            expression="execution(* com.test.spring.dao.*.*(..))" />
        <aop:advisor advice-ref="txAdvice"
            pointcut-ref="interceptorPointCuts" />        
    </aop:config>      
</beans>

5、全注解
<?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="com.test" />

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="sessionFactory"  
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>  

    <!-- 定义事务管理器(声明式的事务) -->  
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
</beans>

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;

import com.test.spring.domain.User;


@Transactional
@Component("userDao")
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {

    public List<User> listUsers() {
        return this.getSession().createQuery("from User").list();
    }

分享到:
评论

相关推荐

    spring中事物配置

    Spring提供了几种事务通知类型,如`@Transactional`注解、`tx:advice`元素等。在XML配置中,我们可以使用`&lt;tx:advice&gt;`元素来定义一个事务通知: ```xml *" propagation="REQUIRED"/&gt; ``` 这里,`*`表示...

    spring-tx事物源码

    Spring的事务管理机制包括编程式事务管理和声明式事务管理,这两种方式都基于`spring-tx`模块。在这个源码中,我们可以深入理解Spring如何处理事务的生命周期、回滚规则以及与各种数据源的集成。 首先,`spring-tx`...

    spring ioc以及事物架构图

    **Spring事务管理主要涉及到以下几个概念:** - **TransactionDefinition**:事务定义接口,描述了事务的行为特征,如隔离级别、回滚规则等。 - **PlatformTransactionManager**:事务管理器接口,负责管理事务的...

    Spring事务管理Demo

    在Spring事务管理Demo中,通常会包含以下几个步骤: 1. 配置事务管理器:在Spring的XML配置文件中,根据数据库类型(如JDBC、Hibernate、MyBatis等)配置相应的事务管理器。 2. 开启事务:使用`@Transactional`注解...

    Spring中的@Transactional事物回滚实例源码

    在Spring中,可以通过以下几种方式配置事务管理: 1. **XML配置**:在Spring的配置文件中,使用`&lt;tx:annotation-driven&gt;`元素启用基于注解的事务管理。 2. **Java配置**:在@Configuration类中,使用@...

    spring自定义标签例子

    此外,理解自定义标签的工作原理还能帮助我们在遇到Spring的其他高级特性,如AOP、事物管理等时,更好地利用XML配置或Java配置来组织代码。自定义标签可以作为扩展Spring功能的一种方式,使我们能够按照自己的需求...

    Springboot 动态多数据源 jta分布式事务

    配置多数据源通常涉及到以下几个步骤: 1. 引入依赖:在`pom.xml`或`build.gradle`文件中添加相应的数据库驱动依赖,如MySQL、Oracle等。 2. 配置数据源:创建多个DataSource Bean,每个Bean对应一个数据库连接配置...

    spring2.5参考手册

    在Spring 2.5版本中,主要包含了以下几个关键知识点: 1. **依赖注入**:这是Spring的核心特性之一。通过DI,Spring容器管理对象的生命周期和对象之间的关系,而不是由对象自己来管理。这减少了代码间的耦合度,...

    maven springboot jta mybatis 分布式事物

    在本项目中,"maven springboot jta mybatis 分布式事物" 是一个核心主题,这涉及到几个关键技术和概念,下面将详细解释这些知识点。 首先,`Maven` 是一个构建工具,它帮助开发者管理项目的依赖关系,构建流程以及...

    AOP实现自我调用的事物嵌套问题

    为了解决这个问题,有以下几种策略: 1. **避免自调用**:尽可能地设计系统,使得事务边界清晰,避免在一个类中进行自调用。可以通过服务层分离或者使用依赖注入来避免这种情况。 2. **显式调用代理**:在自调用时...

    java JSP开发之Spring中Bean的使用

    Spring中的Bean代表着应用中的对象,这些对象由Spring容器管理,提供了一种松耦合和依赖注入的机制。在本文中,我们将深入探讨Spring中Bean的生命周期以及如何创建和配置可被发现的Bean。 首先,让我们理解Spring中...

    SpringCloud最新2021年面试题附答案解析,大汇总.md

    ### SpringCloud最新2021年面试题及答案解析 #### 1、什么是Hystrix断路器?...以上是对Spring Cloud中几个重要概念和技术点的详细介绍,希望能帮助大家更好地理解和掌握Spring Cloud的核心技术。

    CGB_面试题_第三阶段(1).docx

    Spring 框架是一种基于 Java 的开源框架,提供了一个灵活、强大和可扩展的基础结构,用于构建企业级应用程序。下面是 Spring 框架中的一些关键概念和技术要点: 1. Spring Bean 容器 Spring Bean 容器是 Spring ...

    事物管理javaweb.zip

    在"事物管理javaweb.zip"中,可能包含的详细内容有:JDBC事务示例代码、EJB事务配置、Spring事务管理的配置文件和注解使用、事务隔离级别的解释与选择、分布式事务的实现机制等。学习这些内容可以帮助开发者更好地...

    Java面试框架高频问题2019

    **4.SpringBoot的配置文件有哪几种格式?它们有什么区别?** - **properties**:使用键值对的形式。 - **yml/yaml**:使用层级结构,支持数组和复杂对象。 **5.SpringBoot的核心注解是哪个?它主要由哪几个注解...

    ssh2项目 实现登陆,crud操作,用aop控制事物

    - **依赖注入(DI)**:Spring可以通过XML配置或注解方式管理Bean,实现对象间的依赖关系。 - **事务管理**:Spring提供了声明式事务管理,可以通过AOP实现。在CRUD操作中,Spring能够确保数据的一致性,当出现异常...

    Java事物设计策略

    在深入探讨前,我们先明确几个核心概念:事务、ACID特性、JTA(Java Transaction API)、JTS(Java Transaction Service)以及UserTransaction和TransactionManager接口。 ### 事务与ACID特性 事务在数据库中被...

    hibernate源码分析一[启动过程]

    当Hibernate与Spring框架集成时,通常不再需要`hibernate.cfg.xml`文件,而是通过Spring的`FactoryBean`来动态加载和配置Hibernate,将配置信息和映射文件的加载过程bean化。这种方式更加灵活,能够更好地利用Spring...

    日电光学.doc

    ### Hibernate的几种检索方式 1. **查询语言检索**: - **HQL(Hibernate Query Language)**:这是一种面向对象的查询语言,它允许开发人员使用类名和属性名来构造查询语句。例如,`from Employee e where e....

Global site tag (gtag.js) - Google Analytics