面試官問道這個問題基本上是想知道 是否瞭解aop 和ioc的基本概念, 以及大體的實現機制等, 因此我們在回答這個問題時應當首相將概念回答一下, 其次就是應用場景 最後在回答下實現方式等基本ok了
1概念:
首先講下aop, aop是和oop對等的一個概念, oop面向對象編程 而 aop是面向切面編程 , 從本質上來講 oop和aop都是編程思想,oop關注的是對象直接的調用關係和模塊之間直接的業務聯繫 ,屬於縱向行爲; aop更關注於模塊之間對象行爲發生時的問題(業務調用和邏輯), 我們可以將這些公共的處理邏輯抽取出來作爲一個面,屬於橫向行爲。
ioc 控制反轉/依賴注入, 主要是對象的解耦,將對對象的控制權交給容器,包括對象的創建和銷燬等,我們只需要關注業務邏輯,重要的是 ioc是一種思想!
ioc容器對bean的管理方式:
1>beanFactory ; 2>applicationContext; 注意 applicationContext extends beanFactory!
2應用:
aop的主要作用 監控函數/業務邏輯的調用,異常發生等問題,實際應用於 事物,安全和日誌等橫切關注!
3aop的實現方式:
使用jdk的動態代理 和 cglib 注意: 對於有接口的類aop是使用jdk的動態代理, 而對於無接口的類或者是抽象類使用cglib, 雖然cglib均可代理,但是其複雜效率低,不能有final方法!