被面試官問爛的Spring AOP原理,你是怎麼答的?

語言: CN / TW / HK

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