学习中的青年
2018-06-08 17:06
采纳率: 42.3%
浏览 3.0k
已采纳

spring配置事务是用来干嘛的

在写程序的时候,用到了spring,然后看到使用了spring的事务配置,一直不知道这是干嘛的

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property> 
    <property name="hibernateProperties">
        <props> 
        <prop key="hibernate.connection.autocommit">true</prop>
        </props>
    </property>
</bean>           

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref bean="sessionFactory"/>
    </property> 
</bean>

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED"/>
        <tx:method name="useradd*" propagation="REQUIRED"/>
        <tx:method name="delete*" propagation="REQUIRED"/>
        <tx:method name="update*" propagation="REQUIRED"/>

    </tx:attributes>
</tx:advice>

<!-- 那些类的哪些方法参与事务 -->
<aop:config>
    <aop:pointcut id="allManagerMethod" expression="execution(* dao.*.*(..))"/>
    <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • kkdfgdf 2018-06-09 02:33
    已采纳

    spring就是作为容器去管理你的类,有spring管理的类在整个服务器启动期间在内存中只生成一份。
    Spring的Ioc(控制反转和依赖注入)
    控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直
    接操控。
    依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注
    入到组件之中。通俗点说,例如A,B两个类都交由spring管理,A中有B的引用,那么在配置中可以事先配置好,服务器启动时初始化A的时候会自动将B注入到A中,而不用再A中再次去用new来初始化B。spring还可以对事物进行管理。将hibernate的sessionFactory交由spring进行管理。她封装了所有对事务处理的功能,包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理,大大减少了程序员的代码量,也对事务有了很好的管理控制。

    点赞 打赏 评论
  • qq_41915928 2018-06-09 02:19
    点赞 打赏 评论
  • aqiao2011 2018-06-09 03:20

    事务管理器,是用来管理事务的

    点赞 打赏 评论
  • qq_32763555 2018-06-09 07:21

    众所周知,事务有四大特性(ACID)

    1.原子性(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

    2.一致性(Consistency)事务在完成时,必须是所有的数据都保持一致状态。

    3.隔离性(Isolation)并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性。

    4.持久性(Durability)一旦事务完成,数据库的改变必须是持久化的。

    在企业级应用中,多用户访问数据库是常见的场景,这就是所谓的事务的并发。事务并发所可能存在的问题:
    1.脏读:一个事务读到另一个事务未提交的更新数据。
    2.不可重复读:一个事务两次读同一行数据,可是这两次读到的数据不一样。
    3.幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。
    4.丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。

    我们可以在java.sql.Connection中看到JDBC定义了五种事务隔离级别来解决这些并发导致的问题:

    点赞 打赏 评论
  • lixiaozhen007 2018-06-09 09:57

    是为了对多表操作,或者是多个数据操作的时候,防止出现,脏数据的一种方法,同时成功,或者同时失败

    点赞 打赏 评论
  • Harrisz 2018-06-09 13:46
    <!-- 2 创建SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 引入依赖的数据源 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 指定mapper文件的位置 -->
        <property name="mapperLocations" value="classpath:/*DaoMapper.xml"></property>
        <!-- 实体类起别名 
            指定实体类所在的包结构, 默认Spring起别名的规则 , 实体类的简单类名,不包括包结构
            比如: 在com.xxxxxx.entity下有一个User类  别名为   User
        -->
        <property name="typeAliasesPackage" value="com.xxxxentity"></property>
    </bean>
    
    点赞 打赏 评论

相关推荐 更多相似问题