Spring封装的动态代理

这篇具有很好参考价值的文章主要介绍了Spring封装的动态代理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

看proxyFactory.addAdvice主要干了什么?

看下继承关系:

Spring封装的动态代理

 将advisor加入advisors

Spring封装的动态代理

 

 

Spring封装的动态代理

看下如何生成代理对象

org.springframework.aop.framework.DefaultAopProxyFactory#createAopProxy 

Spring封装的动态代理

org.springframework.aop.framework.DefaultAopProxyFactory#hasNoUserSuppliedProxyInterfaces

Spring封装的动态代理 判断是否有接口,没有接口直接返回true

 如果是接口或者代理类直接返回jdk动态代理

Spring封装的动态代理

否则返回cglib代理 

org.springframework.aop.framework.CglibAopProxy#getProxy(java.lang.ClassLoader)

看看如何创建代理对象。

Spring封装的动态代理

 org.springframework.aop.framework.ObjenesisCglibAopProxy#createProxyClassAndInstance

真正的创建代理对象的逻辑:

org.springframework.cglib.proxy.Enhancer#createHelper

org.springframework.cglib.core.AbstractClassGenerator#create

看下代理对象执行过程:

Spring封装的动态代理

 org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor#intercept

Spring封装的动态代理

org.springframework.aop.framework.ReflectiveMethodInvocation#proceed 

Spring封装的动态代理

责任链模式,第一次肯定不会相等。

Spring封装的动态代理

 这里会调用我们手写的方法,然后执行processor

 

Spring封装的动态代理

 再次进来回去执行目标方法

Spring封装的动态代理

 Spring封装的动态代理

 这样就反射到目标方法了,整个流程结束。

1.总结:核心逻辑,重要代码如下:

org.springframework.aop.framework.AdvisedSupport#addAdvice(int, org.aopalliance.aop.Advice)

装饰者模式:advisor包括advice

Spring封装的动态代理

 2.代理对象使用哪种模式,jdk or cglib

org.springframework.aop.framework.ProxyFactory#getProxy()

3.代理对象的产生

org.springframework.aop.framework.CglibAopProxy#getProxy()

org.springframework.aop.framework.CglibAopProxy#createProxyClassAndInstance

org.springframework.cglib.proxy.Enhancer#createHelper

org.springframework.cglib.core.AbstractClassGenerator#create

4.代理对象执行业务逻辑:

org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor#intercept

获取所有执行链

org.springframework.aop.framework.AdvisedSupport#getInterceptorsAndDynamicInterceptionAdvice

Spring封装的动态代理

 获取拦截器

org.springframework.aop.framework.adapter.DefaultAdvisorAdapterRegistry#getInterceptors

Spring封装的动态代理

 这里有个拦截器 c$1

org.springframework.aop.framework.ReflectiveMethodInvocation#ReflectiveMethodInvocation

构造对象,interceptorsAndDynamicMethodMatchers这个有值了,后续会使用到

 

Spring封装的动态代理

 org.springframework.aop.framework.ReflectiveMethodInvocation#proceed

第一次肯定不会去执行代理逻辑:

Spring封装的动态代理

 下面回去执行我们写的代理逻辑,然后执行 invocation.proceed();

Spring封装的动态代理

 再次进来就会去反射执行目标方法,目标方法执行完了,整个流程结束文章来源地址https://www.toymoban.com/news/detail-406106.html

到了这里,关于Spring封装的动态代理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring 动态代理

    感觉不错 三连支持 一起进步! 动态代理 动态代理: ● 特点:字节码随用随创建,随用随加载 ● 作用:不修改源码的基础上对方法增强 ● 分类: ○ 基于接口的动态代理 ○ 基于子类的动态代理 基于接口的动态代理,要求被代理对象的类最少实现一个接口,否则不能创建

    2024年02月08日
    浏览(22)
  • Spring Boot 中的 AOP,到底是 JDK 动态代理还是 Cglib 动态代理

    大家都知道,AOP 底层是动态代理,而 Java 中的动态代理有两种实现方式: 基于 JDK 的动态代理 基于 Cglib 的动态代理 这两者最大的区别在于基于 JDK 的动态代理需要被代理的对象有接口,而基于 Cglib 的动态代理并不需要被代理对象有接口。 那么,Spring 中的 AOP 是怎么实现的

    2024年02月12日
    浏览(24)
  • 动态代理与Spring Aop

    JDK 动态代理 使用JAVA反射包中的类和接口实现动态代理的功能,JAVA.lang.reflect包;主要是三个类: InvocationHandler,Method,Proxy; CGLIB动态代理,第三方工具类库,创建代理对象,cglib的原理是继承,通过继承目标类,创建它的子类,在子类中重写父类中同名的方法,实现功能的修改

    2024年02月11日
    浏览(24)
  • idea必装的插件 Spring Boot Helper 插件(创建 Spring Boot 项目)

            Spring让Java程序更加快速,简单和安全.Spring对于速度、简单性和⽣产⼒的关注使其成为 世界上最流⾏的Java框架。Spring官⽅提供了很多开源的项⽬,覆盖范围从Web开发到⼤数据,Spring发展到了今天,已经形成了⾃ ⼰的⽣态圈.我们在开发时,也倾向于使⽤Spring官⽅提供的技

    2024年02月04日
    浏览(43)
  • spring的aop动态代理对象注入时机

    bean生命周期: bean实例化 populateBean填充属性 invokeAwareMethods调用aware方法 postProcessBeforeInitialization后置处理器before方法 initializeBean初始化bean postProcessAfterAfterInitialization后置处理器after方法 代理对象注入有两种情况:提前和非提前生成代理对象 1. 非提前生成代理对象 依赖于bea

    2024年02月12日
    浏览(31)
  • Spring AOP 学习(动态代理、JdbcTemplate、Junit)

    Proxy  jdk动态代理,面向接口 cglib   第三方动态代理,面向父类 在 不修改原有代码 ,或者没有办法修改原有代码的情况下, 增强对象功能 ,使用代理对象代替原来的对象去完成功能,进而达到拓展功能的目的 JDK Proxy 动态代理是 面向接口 的动态代理,一定要有接口和实现

    2024年02月08日
    浏览(27)
  • Spring | Srping AOP (AOP简介、动态代理、基于“代理类”的AOP实现)

    作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习! 该文章 参考学习教材 为: 《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著 文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和

    2024年01月22日
    浏览(27)
  • JDK 动态代理(Spring AOP 的原理)(面试重点)

            也叫委托模式.定义:为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤,在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对象,⽽代

    2024年01月22日
    浏览(30)
  • Spring之CGLIB和JDK动态代理底层实现

    目录 CGLIB 使用示例-支持创建代理对象,执行代理逻辑 使用示例-多个方法,走不同的代理逻辑 JDK动态代理 使用示例-支持创建代理对象,执行代理逻辑 ProxyFactory 如何自动在CGLIB和JDK动态代理转换 使用示例-使用CGLIB代理方式 使用示例-使用JDK动态代理方式 Spring会自动在JDK动态

    2024年04月25日
    浏览(19)
  • 54.Spring的AOP是在哪里创建的动态代理?

    正常的Bean会在Bean的生命周期的‘初始化’后, 通过BeanPostProcessor.postProcessAfterInitialization创建aop的动态代理 还有一种特殊情况: 循环依赖的Bean会在Bean的生命周期‘属性注入’时存在的循环依赖的情况下, 也会为循环依赖的Bean 通过MergedBeanDefinitionPostProcessor.postProcessMergedBe

    2024年02月02日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包