美文网首页
Spring事务Transactional和动态代理

Spring事务Transactional和动态代理

作者: 奔向学霸的路上 | 来源:发表于2020-04-07 22:54 被阅读0次

相关文章:代理模式
引用

虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。

@Component
@Transactional 
public interface UserDao extends CrudRepository<User,Integer>{
}

Q1:基于接口的代理究竟是什么意思?
Q2:如上的在接口的注解能否生效?是否会有什么特殊效果?

回答Q1:
基于接口即是说的jdk利用反射实现的动态代理的方式。
回答Q2:
会生效的,不管你这个dao有没有实现类(如果是mybatis对应的mapper,mybatis会用jdk的动态代理生成一个实现类的)。

Spring AOP是采用动态代理的方式实现,动态代理有两种方式实现:

  1. java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
  2. cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

Spring使用这两种方式的策略是:

  1. 如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
  2. 如果目标对象实现了接口,可以强制使用CGLIB实现AOP
  3. 如果目标对象没有实现了接口,必须采用CGLIB库,Spring会自动在JDK动态代理和CGLIB之间转换

原文链接:https://bbs.csdn.net/topics/392176928

相关文章

  • Spring事务Transactional和动态代理

    相关文章:代理模式引用 虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 S...

  • 【Java 开发常见的坑】——@Transactional 事务

    Spring中通过@Transactional注解动态代理对目标方法的增强,可以很方便的回滚事务。但是,如果不熟悉...

  • 代理模式

    应用场景 代理模式Service层、事务处理 @Transactional 底层AOP代理-JDK动态代理 1.静...

  • @Transactional失效场景

    上一篇:事务的两种形式 @Transactional介绍 @Transactional注解底层使用的是动态代理来进...

  • Spring事务

    Spring事务使用 spring事物配置,声明式事务管理和基于@Transactional注解的使用spring...

  • JDK动态代理使Spring事务失效

    1.JDK 动态代理 简单的动态代理: 接口 接口实现类 代理类 测试 2.Spring事务 事务有四个特性:AC...

  • 0.Java知识体系

    J2EE事务ACTION动态代理 Spring Mybatis Spring MVC前端控制器和三大组件 Andr...

  • Spring事务

    Spring事务使用的是Cglib基于类的动态代理技术。

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

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

  • SpringBoot动态代理

    Spring Boot动态代理分两种,JDK的动态代理和cglib的动态代理Spring Boot默认使用JDK的...

网友评论

      本文标题:Spring事务Transactional和动态代理

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