面試的時候關於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是面向切面程式設計,非侵入式程式設計 用來實現非業務性...