spring面試題之AOP

2021-09-05 11:33:29 字數 1974 閱讀 9322

面試的時候關於spirng的知識點中,aop絕對是一大熱點,那麼該怎麼回答關於aop的面試問題呢,接下來,將我自己總結的關於aop的面試問題分享給各位。

(1).spring aop用的是哪種設計模式?

**模式。

通過**,可以詳細控制訪問某個或者某類物件的方法,在呼叫這個方法前做前置處理,呼叫這個方法後做後置處理。

(2).談談你對**模式的理解?

通過**,控制對物件的訪問,它的設計思路是:定義乙個抽象角色,讓**角色和真實角色分別去實現它

真實角色就是實現抽象角色,定義真實角色所要實現的業務邏輯,供**角色呼叫,它只關注真正的業務邏輯。

**角色就是實現抽象角色,是真實角色的**,通過真實角色的業務邏輯方法來實現抽象方法,並在前後可以附加自己的操作。

(3).靜態**和動態**有什麼區別?

**模式分為靜態**和動態**,靜態**是我們自己建立乙個**類,而動態**是程式自動幫我們生成乙個**。

靜態**需要建立真實角色和**角色,分別實現抽象角色,真實角色可以直接實現,**類需要將真是的物件傳進來。

(1).接受真實物件

(2).通過構造方法傳進來真實的物件

動態**比靜態**使用的更廣泛,在本質上,動態**的**類不用我們來管,交給工具去生成**類即可。

jdk 動態**:

我們不需要去建立**類,那我們只需要編寫乙個動態處理器就可以了,真正的**物件由jdk在執行時為我們動態的建立。

動態**處理類:

(1).接收真實物件

(2).通過構造方法傳進來真實的物件

(3).給真實物件生成乙個**物件例項

相對於靜態**,jdk 動態**大大減少了我們的開發任務,同時減少了對業務介面的依賴,降低了耦合度。jdk 動態**是利用反射機制生成乙個實現**介面的匿名類,在呼叫具體方法前第啊用invokehandler來處理。

jdk 動態**的特點:jdk 實現動態**需要實現類通過介面定義業務方法。

2. cglib 動態**:

對於沒有介面的類,就需要cglib。

原理:通過位元組碼技術為乙個類建立子類,並在子類中採用方法攔截的技術攔截所有父類方法的呼叫,順勢織入橫切邏輯。採用繼承,不能對final修飾的類進行**

使用cglib需要實現methodinterceptor介面,並重寫intercept方法,在該方法中對原始要執行的方法前後做增強處理。該類的**物件可以使用**中的位元組碼增強器來獲取。 

cglib建立的動態**物件比jdk建立的動態**物件的效能更高,但是cglib建立**物件時所花費的時間卻比jdk多得多。所以對於單例物件,因為無需頻繁建立物件,用cglib合適,反之使用jdk要合適一些。

cglib採用動態建立子類的方法,對於final修飾的方法無法進行**。

要**的類中可能不止一種方法,有時候需要對特定的方法進行增強處理,可以對傳入的method引數進行方法名的判斷,再做相應的處理。

(4).spring aop採用哪種**?

jdk 動態**和cglib 動態**均是實現spring aop的基礎。 

在spring 5原始碼中:

(1).判斷是否是最優化的,判斷是否是**類,判斷**的物件是否又實現介面。前兩個判斷預設返回false

(2).判斷目標類是否為null,若為null,則丟擲異常 (aopconfigexception) 

(3).判斷目標類是否是介面或者目標類是否是proxy型別,若是則使用jdk動態**

(4).若配置使用cglib進行動態**或者目標類沒有介面,那麼使用cglib的方式建立**物件

(5).若(2)、(3)、(4)方法中沒有乙個為true,那使用jdk的提供的**方式生成**物件。

如果目標物件實現了介面,預設情況下會採用jdk的動態**實現aop;如果目標物件沒有實現介面,則採用cglib庫,spring會自動在jdk動態**和cglib動態**之間轉換。

spring面試題目

目錄 一 spring mvc工作原理二 為什麼要用spring 1 spring能很好的與各大框架進行整合 2 建立物件時,如果我們不用spring需要用工廠模式來建立,這個spring相當於工廠模式已經幫我們做了建立物件的功能 ioc 依賴注入 3 在用hibernate的時候,如果不用spri...

Spring面試題分享

1.下面關於 依賴注入 的說法,錯誤的是 d a.將元件間的依賴關係採取配置檔案的方式管理,而不是硬編碼在 中 b.降低了元件間的耦合,使程式更容易維護和公升級 c.促進了 面向介面程式設計 使構建大規模程式更輕鬆 d.需要定義大量介面,增加編碼複雜度 2.關於spring說法錯誤的是 b a.sp...

Spring框架面試題

用動態 和cglib實現,有介面的用動態 無介面的用cglib spring 充當了管理容器的角色,為大部分框架提供模板,給常見的核心類提供初始化,並且整合三層框架 內部用hashmap實現 ioc是一種控制反轉的思想,降低了物件的耦合度,aop是面向切面程式設計,非侵入式程式設計 用來實現非業務性...