zoukankan      html  css  js  c++  java
  • Spring事务笔记

    1:在同一个类中,如果A方法有事务,B方法也有事务(propagation = Propagation.REQUIRES_NEW),如下代码所示:

    @Override
    @Transactional
    public void insertUser(User user, Goods goods){
    userMapper.insert(user);
    try {
    }catch (Exception e){
    }
    }


    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void insertGoods(Goods goods) throws Exception{
    goodsMapper.insert(goods);
    throw new Exception("sadf");
    }

    则B方法是会插入数据的,事务是没有回滚的。

    2:Spring事务实现机制:Spring事务是使用AOP原理实现的,其实也就是动态代理,动态代理的作用是实现方法增强。
    动态代理需要两个重要的类:Proxy和InvocationHandler
    Proxy :负责new对象
    InvocationHandler : 实现增强

    3:注解:@Auword,也是实现代理模式

    也是代理类spring容器启动的时候 所有的类全部扫描,发现加了注解之后,方法为key 注解为value,Map<key,List<Value>>

    不同的注解对应的拦截器是不一样的

    4:为了解决1问题,在springboot项目中,在Application类中添加注解 @EnableAspectJAutoProxy(exposeProxy=true)

    然后在A方法中实现这样的方法:所以方法B能被动态代理了,方法前后则实现方法增强,从而实现事务。

    @Override
    @Transactional
    public void insertUser(User user, Goods goods){
    userMapper.insert(user);
    try {
    IUserService service = (IUserService)AopContext.currentProxy();
    service.insertGoods(goods);
    }catch (Exception e){
    }
    }


    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void insertGoods(Goods goods) throws Exception{
    goodsMapper.insert(goods);
    throw new Exception("sadf");
    }














    郭慕荣博客园
  • 相关阅读:
    Java Web系统经常使用的第三方接口
    Direct UI
    Python 分析Twitter用户喜爱的推文
    数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
    利用Excel批量高速发送电子邮件
    普林斯顿大学数学系的崛起
    Node.js学习
    映射 SQL 和 Java 类型
    Nutch配置
    OGNL
  • 原文地址:https://www.cnblogs.com/jelly12345/p/11963896.html
Copyright © 2011-2022 走看看