美文网首页
spring事务和aop同时使用,事务不生效

spring事务和aop同时使用,事务不生效

作者: 江江的大猪 | 来源:发表于2017-11-15 13:25 被阅读190次

spring事务和aop同时使用

对同一个类即用aop又用事务,需要指定代理顺序,保证事务的代理包裹aop的代理,也就是事务的order大于aop的order,否则事务会失效,也就是不会回滚。

  • 使用aop的地方设置order如下:
@Order(1)
@Component
@Aspect
public class AopDaoRunTime {
    private static final Logger LOGGER = LoggerFactory.getLogger(AopDaoRunTime.class);
    @Around("execution(* com.qunar.lfz.dao.impl.*.*(..))")
    public Object printDaoTime(ProceedingJoinPoint point) {
        String methodName = point.getSignature().getName();
        Object result = null;
        try {
            long startTime = System.currentTimeMillis();
            result = point.proceed();
            long endTime = System.currentTimeMillis();
            LOGGER.info("{}方法执行时间为{}ms", methodName, endTime - startTime);
        } catch (Throwable e) {
            LOGGER.error("获得dao执行方法时间出错", e);
            return null;
        }
        return result;
    }
}
  • 配置spring事务和aop的xml:
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <tx:annotation-driven transaction-manager="transactionManager" order="2"/>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="xxx"/>
    </bean>

aop的配置中指定proxy-target-class="true",会使用cglib生成子类做代理,现在的cglib效率比jdk的基于接口的代理效率高很多
需要注意的是如果使用的是代理对象,对属性的读写都要通过get、set方法来做。代理对象的属性都是null,通过get、set方法才能读写被代理对象中的属性

  • spring手动回滚

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

肥肥小浣熊

相关文章

  • spring事务和aop同时使用,事务不生效

    spring事务和aop同时使用 对同一个类即用aop又用事务,需要指定代理顺序,保证事务的代理包裹aop的代理,...

  • Spring事务不生效问题

    事务未生效可能造成严重的数据不一致性问题,因而保证事务生效至关重要。Spring事务是通过Spring aop实现...

  • 内部方法调用时,aop失效

    Spring管理实务使用aop 对事务进行处理,方法前开启事务,方法后提交事务,aop使用动态代理生成代理对象调用...

  • 8、AOP

    Spring AOP: spring分为:1、IOC/DI 2、AOPAOP的使用场景:日志和事务概念:AOP为A...

  • Spring事务传播机制

    1.Spring事务执行的原理; Spring事务使用AOP的机制实现,会在@Transcactional注解修饰...

  • 十七、spring事务之简单使用和原理

    注:要了解spring事务最好先去了解spring aop,可以参考十一、spring aop之简单使用 简单使用...

  • spring事务管理

    spring事务管理 使用方式分类:声明式事务 @Transactional 通过AOP来实现的;起到事务管理...

  • Spring基于注解的AOP配置中的事务控制

    原文相关文章 Spring基于注解的AOP配置中的事务控制 在Spring基于注解的AOP事务控制配置中,使用四个...

  • spring事务(二) 声明式事务

    spring事务(二) 声明式事务 知识导读 声明式事务是对编程式事务的包装 声明式事务通过使用AOP来实现,注册...

  • spring事务与aop的理解

    声明式事务: 自动事务,原理是使用编程式事务+反射机制进行包装.分注解版本和xml版本。利用spring的aop特...

网友评论

      本文标题:spring事务和aop同时使用,事务不生效

      本文链接:https://www.haomeiwen.com/subject/rmbcvxtx.html