被面試官問爛的Spring AOP原理,你是怎麼答的?
Spring AOP在Spring體系中深不可測,Spring AOP原理也是經常在網際網路大廠面試時被問到,今天,我給大家抽絲剝繭,詳細到你無法想象。我劃分為四個階段給大家介紹:建立代理物件階段、攔截目標物件階段、呼叫代理物件階段、呼叫目標物件階段。
我整理了一張完整的Spring AOP設計原理UML圖,需要高清圖的小夥伴可以私信我。
下面詳細介紹每個階段的執行細節。
1、第一階段:建立代理物件階段
在Spring中,建立Bean例項都是從getBean()方法開始的(出現getBean()動畫),在例項建立之後,Spring容器將根據AOP的配置去匹配目標類的類名,看目標類的類名是否滿足切面規則。如果滿足滿足切面規則,就會呼叫ProxyFactory建立代理Bean並快取到IoC容器中。(出現呼叫ProxyFactory建立代理Bean動畫)根據目標物件的自動選擇不同的代理策略。(出現選擇代理策略動畫)如果目標類實現了介面,Spring會預設選擇JDK Proxy,如果目標類沒有實現介面,Spring會預設選擇Cglib Proxy,當然,我們也可以通過配置強制使用Cglib Proxy。
2、第二階段:攔截目標物件階段
當用戶呼叫目標物件的某個方法時,(出現AopProxy物件攔截)將會被一個叫做AopProxy的物件攔截,Spring將所有的呼叫策略封裝到了這個物件中,它預設實現了InvocationHandler介面,也就是呼叫代理物件的外層攔截器。(出現呼叫InvocationHandler的invoke()方法動畫)在這個介面的invoke()方法中,(出現觸發MethodInvocation的proceed()方法動畫)會觸發MethodInvocation的proceed()方法。在這個方法中會按順序執行符合所有AOP攔截規則的攔截器鏈。
3、第三階段:呼叫代理物件階段
Spring AOP攔截器鏈中的每個元素被命名為MethodInterceptor,(出現反射呼叫Advice物件
動畫)其實就是切面配置中的Advice通知。這個回撥通知可以簡單地理解為是新生成的代理Bean中的方法。(出現執行織入程式碼動畫)也就是我們常說的被織入的程式碼片段,這些被織入的程式碼片段會在這個階段執行。
4、第四階段:呼叫目標物件階段
MethodInterceptor介面也有一個invoke()方法,(出現執行MethodInterceptor的invoke()方法動畫)在MethodInterceptor的invoke()方法中會觸發對目標物件方法的呼叫,也就是反射呼叫目標物件的方法。(出現呼叫目標物件動畫)
Spring AOP原理就分析到這裡,最後,總結一下不迷路:
1、代理物件:就是由Spring代理策略生成的物件;
2、目標物件:就是我們自己寫的業務程式碼;
3、織入程式碼:就是要在我們自己寫的業務程式碼增加的程式碼片段;
4、切面通知:就是封裝織入程式碼片段的回撥方法;
5、MethodInvocation:負責執行攔截器鏈,在proceed()方法中執行;
6、MethodInterceptor:負責執行織入的程式碼片段,在invoke()方法中執行。
都看到這裡了,你還覺得Spirng AOP原理難嗎?我再送給大家一張精簡版的Spring AOP執行流程圖,需要的小夥伴立馬關注點個贊。
我是被程式設計耽誤的文藝Tom,如果大家還有其他疑問,可以在評論區留言。如果本次面試解析對你有幫助,請動動手指一鍵三連分享給更多的人。關注我,面試不再難!
S信【Tom】或【666】即可免費領取需要更多幹貨內容,還有海量面試資料,只彈乾貨不慘水!
本文為“Tom彈架構”原創,轉載請註明出處。技術在於分享,我分享我快樂!\ 如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支援是我堅持創作的動力。關注微信公眾號『 Tom彈架構 』可獲取更多技術乾貨!
我是被程式設計耽誤的文藝Tom
- 使用橋接模式設計複雜的訊息系統
- 為什麼MySQL索引結構採用B 樹?
- 為什麼Netty執行緒池預設大小為CPU核數的2倍
- 談談你對深克隆和淺克隆的理解
- 什麼是代理,為什麼要用動態代理?
- 什麼是零拷貝,Netty是如何實現的?
- 3分鐘輕鬆理解單執行緒下的HashMap工作原理
- 被面試官問爛的Spring AOP原理,你是怎麼答的?
- Spring為何需要三級快取解決迴圈依賴,而不是二級快取?
- 為什麼Spring中每個Bean都要定義作用域?
- 談談你對Spring Bean的理解
- 趣談裝飾器模式,讓你一輩子不會忘
- 掌握這些招數,你也能寫出HR眼中的高分簡歷
- MongoDB高階應用之資料轉存與恢復(5)
- 圖解MongoDB叢集部署原理(3)
- 爆肝30天,肝出來史上最透徹Spring原理和27道高頻面試題總結
- Spring核心原理之IoC容器初體驗(2)
- Spring核心原理分析之MVC九大元件(1)
- 30個類手寫Spring核心原理之動態資料來源切換(8)
- 【緊急】Log4j又發新版2.17.0,只有徹底搞懂漏洞原因,才能以不變應萬變,小白也能看懂