spring 声明式事务处理及测试用类,其他未列出。

原创 2011年01月24日 16:36:00

1、首先给出配置文件:

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
        </property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl">
        </property>
        <property name="username" value="report"></property>
        <property name="password" value="neusoft"></property>
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.Oracle9Dialect
                </prop>
                <prop key="hibernate.show_sql">
                    true
                </prop>
            </props>
        </property>
        <property name="mappingLocations">
            <list>
                <value>classpath:com/models/*.hbm.xml</value>
            </list>
        </property>
    </bean>

    <!-- 配置事务管理器,需要依赖注入一个sessionFactory. -->  
     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
      <property name="sessionFactory"><ref local="sessionFactory"/></property>  
    </bean> 
    <!--  配置事务拦截器,需要依赖注入一个事务管理器,指明事务的传播属性。-->  
   <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">   
       <property name="transactionManager" ref="transactionManager"/>  
       <property name="transactionAttributes">  
          <props>  
               <prop key="save*">PROPAGATION_REQUIRED</prop>  
               <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>  
              <prop key="*">PROPAGATION_REQUIRED</prop>  
            </props>  
       </property>  
   </bean>  
   <!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性,指定对满足哪些bean name的bean自动生成业务代理-->  
   <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
        <property name="beanNames">  
           <list>  
               <value>welcome</value>  
          </list>   
       </property>   
       <property name="interceptorNames">  
          <list>  
               <value>transactionInterceptor</value>   
            </list>  
      </property>  
   </bean>  

    <bean name="/welcome" class="com.huangyz.struts.action.WelcomeYou">
     <property name="welcome">
      <ref bean="welcome"></ref>
     </property>
    </bean>
    <bean name="welcome" class="com.huangyz.applogic.impl.Welcome">
        <property name="usersDao">
            <ref bean="UsersDAO"></ref>
        </property>
        <property name="user">
            <ref bean="user"></ref>
        </property>
    </bean>
    <bean id="UsersDAO" class="com.huangyz.dao.impl.UsersDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>
    <bean id="user" class="com.huangyz.entity.Users" ></bean>
</beans>

2、给出我的测试类:

package com.huangyz.applogic.impl;
import com.huangyz.applogic.interfaces.IWelcome;
import com.huangyz.dao.impl.UsersDAO;
import com.huangyz.entity.Users;
/**
* @see:数据库中给的password的最大长度为8,在这里做的是事务测试,如果起作用,那么数据库中一条都不会插入,
* 反之,会插入一条。
* @author huangyz
*
*/
public class Welcome implements IWelcome {
    private UsersDAO usersDao;
    private Users user;
    public void welcome() {
        user.setName("transManaged12");
        user.setPassword("12345678");
        usersDao.save(user);
        /*下面代码保证两次都是插入,这里改变了实体在session中的状态*/
        usersDao.getSessionFactory().getCurrentSession().evict(user);
        user.setName("tranManaged13");
        user.setPassword("123456789");
        usersDao.save(user);
    }
    public void setUsersDao(UsersDAO usersDao) {
        this.usersDao = usersDao;
    }
    public void setUser(Users user) {
        this.user = user;
    }
}

spring事务管理(声明式事务和编程式事务)

spring的事务管理分为:声明式事务和编程式事务 spring对事务管理通常分为三部分:DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只...
  • xinyoulin
  • xinyoulin
  • 2016年08月21日 20:40
  • 2870

Spring声明式事务管理

Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。 Spring默认情况下会对运...
  • loadhai
  • loadhai
  • 2014年01月03日 21:55
  • 11310

那些年spring声明式事务@Transaction的坑

作为开发人员,我相信同学们都会遇到这样的一个业务场景:一个业务方法90%的逻辑都是在做查询,只有最后一部分才是对数据的更新。如果更新失败则业务回滚。常见的做法就是在该方法上加一个@Transactio...
  • y943623901
  • y943623901
  • 2016年03月10日 16:49
  • 7164

Spring延迟加载和声明式事务处理最终解决方案(修正版)

  • 2009年09月17日 11:16
  • 300KB
  • 下载

spring2.5+Hibernate3.3五种声明式事务处理 + 所需Jar

  • 2011年04月08日 09:51
  • 9.76MB
  • 下载

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

  • 2011年08月04日 09:29
  • 195KB
  • 下载

Spring声明式事务处理理解

1、事物有四个特性:原子性、一致性、隔离性、持久性。 2、对于一次操作要么全部执行成功,要么全部不成功,这就是原子性,这也是很重要的一个特性,对于一次转账操作,对于中间的任何一个环节不成功,那么整个...
  • akwolf
  • akwolf
  • 2011年10月14日 12:54
  • 712

Spring——声明式的事务处理

Spring声明式的事务处理
  • yaguanzhou2014
  • yaguanzhou2014
  • 2015年01月27日 23:08
  • 543

大数据WEB阶段Spring框架(三)声明式事务处理

Spring整合JDBC—声明式的事务处理一、Spring整合JDBC步骤 导入jar包 编写数据库配置文件 也可以将数据库配置信息单独配置后引入Spring容器中代码中使用 二、Spring框架中...
  • chou_out_man
  • chou_out_man
  • 2017年12月24日 21:15
  • 35

spring声明式事务处理(使用jdbc操作数据库)

声明式:针对编程人员,声明spring容器遇到哪些目标方法时需要开启事务,哪些不用开启事务。 事务处理:把事务处理交给spring容器来完成。 spring声明式事务处理的目标: 让程序...
  • andy_px
  • andy_px
  • 2015年09月23日 17:10
  • 474
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring 声明式事务处理及测试用类,其他未列出。
举报原因:
原因补充:

(最多只允许输入30个字)