国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring封裝的動(dòng)態(tài)代理

這篇具有很好參考價(jià)值的文章主要介紹了Spring封裝的動(dòng)態(tài)代理。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

看proxyFactory.addAdvice主要干了什么?

看下繼承關(guān)系:

Spring封裝的動(dòng)態(tài)代理

?將advisor加入advisors

Spring封裝的動(dòng)態(tài)代理

?

 

Spring封裝的動(dòng)態(tài)代理

看下如何生成代理對象

org.springframework.aop.framework.DefaultAopProxyFactory#createAopProxy?

Spring封裝的動(dòng)態(tài)代理

org.springframework.aop.framework.DefaultAopProxyFactory#hasNoUserSuppliedProxyInterfaces

Spring封裝的動(dòng)態(tài)代理?判斷是否有接口,沒有接口直接返回true

?如果是接口或者代理類直接返回jdk動(dòng)態(tài)代理

Spring封裝的動(dòng)態(tài)代理

否則返回cglib代理?

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

看看如何創(chuàng)建代理對象。

Spring封裝的動(dòng)態(tài)代理

?org.springframework.aop.framework.ObjenesisCglibAopProxy#createProxyClassAndInstance

真正的創(chuàng)建代理對象的邏輯:

org.springframework.cglib.proxy.Enhancer#createHelper

org.springframework.cglib.core.AbstractClassGenerator#create

看下代理對象執(zhí)行過程:

Spring封裝的動(dòng)態(tài)代理

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

Spring封裝的動(dòng)態(tài)代理

org.springframework.aop.framework.ReflectiveMethodInvocation#proceed?

Spring封裝的動(dòng)態(tài)代理

責(zé)任鏈模式,第一次肯定不會相等。

Spring封裝的動(dòng)態(tài)代理

?這里會調(diào)用我們手寫的方法,然后執(zhí)行processor

?

Spring封裝的動(dòng)態(tài)代理

?再次進(jìn)來回去執(zhí)行目標(biāo)方法

Spring封裝的動(dòng)態(tài)代理

?Spring封裝的動(dòng)態(tài)代理

?這樣就反射到目標(biāo)方法了,整個(gè)流程結(jié)束。

1.總結(jié):核心邏輯,重要代碼如下:

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

裝飾者模式:advisor包括advice

Spring封裝的動(dòng)態(tài)代理

?2.代理對象使用哪種模式,jdk or cglib

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

3.代理對象的產(chǎn)生

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.代理對象執(zhí)行業(yè)務(wù)邏輯:

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

獲取所有執(zhí)行鏈

org.springframework.aop.framework.AdvisedSupport#getInterceptorsAndDynamicInterceptionAdvice

Spring封裝的動(dòng)態(tài)代理

?獲取攔截器

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

Spring封裝的動(dòng)態(tài)代理

?這里有個(gè)攔截器 c$1

org.springframework.aop.framework.ReflectiveMethodInvocation#ReflectiveMethodInvocation

構(gòu)造對象,interceptorsAndDynamicMethodMatchers這個(gè)有值了,后續(xù)會使用到

 

Spring封裝的動(dòng)態(tài)代理

?org.springframework.aop.framework.ReflectiveMethodInvocation#proceed

第一次肯定不會去執(zhí)行代理邏輯:

Spring封裝的動(dòng)態(tài)代理

?下面回去執(zhí)行我們寫的代理邏輯,然后執(zhí)行 invocation.proceed();

Spring封裝的動(dòng)態(tài)代理

?再次進(jìn)來就會去反射執(zhí)行目標(biāo)方法,目標(biāo)方法執(zhí)行完了,整個(gè)流程結(jié)束文章來源地址http://www.zghlxwxcb.cn/news/detail-406106.html

到了這里,關(guān)于Spring封裝的動(dòng)態(tài)代理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • spring 動(dòng)態(tài)代理

    感覺不錯(cuò) 三連支持 一起進(jìn)步! 動(dòng)態(tài)代理 動(dòng)態(tài)代理: ● 特點(diǎn):字節(jié)碼隨用隨創(chuàng)建,隨用隨加載 ● 作用:不修改源碼的基礎(chǔ)上對方法增強(qiáng) ● 分類: ○ 基于接口的動(dòng)態(tài)代理 ○ 基于子類的動(dòng)態(tài)代理 基于接口的動(dòng)態(tài)代理,要求被代理對象的類最少實(shí)現(xiàn)一個(gè)接口,否則不能創(chuàng)建

    2024年02月08日
    瀏覽(10)
  • Spring Boot 中的 AOP,到底是 JDK 動(dòng)態(tài)代理還是 Cglib 動(dòng)態(tài)代理

    Spring Boot 中的 AOP,到底是 JDK 動(dòng)態(tài)代理還是 Cglib 動(dòng)態(tài)代理

    大家都知道,AOP 底層是動(dòng)態(tài)代理,而 Java 中的動(dòng)態(tài)代理有兩種實(shí)現(xiàn)方式: 基于 JDK 的動(dòng)態(tài)代理 基于 Cglib 的動(dòng)態(tài)代理 這兩者最大的區(qū)別在于基于 JDK 的動(dòng)態(tài)代理需要被代理的對象有接口,而基于 Cglib 的動(dòng)態(tài)代理并不需要被代理對象有接口。 那么,Spring 中的 AOP 是怎么實(shí)現(xiàn)的

    2024年02月12日
    瀏覽(24)
  • 動(dòng)態(tài)代理與Spring Aop

    動(dòng)態(tài)代理與Spring Aop

    JDK 動(dòng)態(tài)代理 使用JAVA反射包中的類和接口實(shí)現(xiàn)動(dòng)態(tài)代理的功能,JAVA.lang.reflect包;主要是三個(gè)類: InvocationHandler,Method,Proxy; CGLIB動(dòng)態(tài)代理,第三方工具類庫,創(chuàng)建代理對象,cglib的原理是繼承,通過繼承目標(biāo)類,創(chuàng)建它的子類,在子類中重寫父類中同名的方法,實(shí)現(xiàn)功能的修改

    2024年02月11日
    瀏覽(21)
  • idea必裝的插件 Spring Boot Helper 插件(創(chuàng)建 Spring Boot 項(xiàng)目)

    idea必裝的插件 Spring Boot Helper 插件(創(chuàng)建 Spring Boot 項(xiàng)目)

    ????????Spring讓Java程序更加快速,簡單和安全.Spring對于速度、簡單性和?產(chǎn)?的關(guān)注使其成為 世界上最流?的Java框架。Spring官?提供了很多開源的項(xiàng)?,覆蓋范圍從Web開發(fā)到?數(shù)據(jù),Spring發(fā)展到了今天,已經(jīng)形成了? ?的?態(tài)圈.我們在開發(fā)時(shí),也傾向于使?Spring官?提供的技

    2024年02月04日
    瀏覽(23)
  • spring的aop動(dòng)態(tài)代理對象注入時(shí)機(jī)

    spring的aop動(dòng)態(tài)代理對象注入時(shí)機(jī)

    bean生命周期: bean實(shí)例化 populateBean填充屬性 invokeAwareMethods調(diào)用aware方法 postProcessBeforeInitialization后置處理器before方法 initializeBean初始化bean postProcessAfterAfterInitialization后置處理器after方法 代理對象注入有兩種情況:提前和非提前生成代理對象 1. 非提前生成代理對象 依賴于bea

    2024年02月12日
    瀏覽(21)
  • Spring AOP 學(xué)習(xí)(動(dòng)態(tài)代理、JdbcTemplate、Junit)

    Spring AOP 學(xué)習(xí)(動(dòng)態(tài)代理、JdbcTemplate、Junit)

    Proxy? jdk動(dòng)態(tài)代理,面向接口 cglib? ?第三方動(dòng)態(tài)代理,面向父類 在 不修改原有代碼 ,或者沒有辦法修改原有代碼的情況下, 增強(qiáng)對象功能 ,使用代理對象代替原來的對象去完成功能,進(jìn)而達(dá)到拓展功能的目的 JDK Proxy 動(dòng)態(tài)代理是 面向接口 的動(dòng)態(tài)代理,一定要有接口和實(shí)現(xiàn)

    2024年02月08日
    瀏覽(25)
  • Spring | Srping AOP (AOP簡介、動(dòng)態(tài)代理、基于“代理類”的AOP實(shí)現(xiàn))

    Spring | Srping AOP (AOP簡介、動(dòng)態(tài)代理、基于“代理類”的AOP實(shí)現(xiàn))

    作者簡介 :一只大皮卡丘,計(jì)算機(jī)專業(yè)學(xué)生,正在努力學(xué)習(xí)、努力敲代碼中! 讓我們一起繼續(xù)努力學(xué)習(xí)! 該文章 參考學(xué)習(xí)教材 為: 《Java EE企業(yè)級應(yīng)用開發(fā)教程 (Spring + Spring MVC +MyBatis)》 黑馬程序員 / 編著 文章以課本知識點(diǎn) + 代碼為主線,結(jié)合自己看書學(xué)習(xí)過程中的理解和

    2024年01月22日
    瀏覽(18)
  • Spring Boot攔截器與動(dòng)態(tài)代理深度剖析

    Spring Boot攔截器與動(dòng)態(tài)代理深度剖析

    ??歡迎來到架構(gòu)設(shè)計(jì)專欄~Spring Boot攔截器與動(dòng)態(tài)代理深度剖析 ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:架構(gòu)設(shè)計(jì) ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實(shí)戰(zhàn)項(xiàng)目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如果

    2024年01月22日
    瀏覽(26)
  • Spring之CGLIB和JDK動(dòng)態(tài)代理底層實(shí)現(xiàn)

    Spring之CGLIB和JDK動(dòng)態(tài)代理底層實(shí)現(xiàn)

    目錄 CGLIB 使用示例-支持創(chuàng)建代理對象,執(zhí)行代理邏輯 使用示例-多個(gè)方法,走不同的代理邏輯 JDK動(dòng)態(tài)代理 使用示例-支持創(chuàng)建代理對象,執(zhí)行代理邏輯 ProxyFactory 如何自動(dòng)在CGLIB和JDK動(dòng)態(tài)代理轉(zhuǎn)換 使用示例-使用CGLIB代理方式 使用示例-使用JDK動(dòng)態(tài)代理方式 Spring會自動(dòng)在JDK動(dòng)態(tài)

    2024年04月25日
    瀏覽(29)
  • 54.Spring的AOP是在哪里創(chuàng)建的動(dòng)態(tài)代理?

    正常的Bean會在Bean的生命周期的‘初始化’后, 通過BeanPostProcessor.postProcessAfterInitialization創(chuàng)建aop的動(dòng)態(tài)代理 還有一種特殊情況: 循環(huán)依賴的Bean會在Bean的生命周期‘屬性注入’時(shí)存在的循環(huán)依賴的情況下, 也會為循環(huán)依賴的Bean 通過MergedBeanDefinitionPostProcessor.postProcessMergedBe

    2024年02月02日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包