談談對ioc,aop的理解
Ioc:控制反轉
定義:Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的 物件交給容器控制,而不是傳統的在你的物件內部直接控制。如何理解好Ioc呢?理解好Ioc的關鍵是要明確“誰控制誰, 控制什麼,為何是反轉(有反轉就應該有正轉了),哪些方面反轉了”,那我們來深入分析一下:
正轉與反轉:
正轉:傳統的應用程式由我們在物件中主動去建立物件依賴
反轉:程式中需要的物件由ioc容器建立,程式直接呼叫即可。
DI(依賴注入):
被注入物件依賴IoC容器配置依賴物件
注入物件方式:註解,xml配置(傳參:構造方法,set)
ioc容器控制物件,應用程式依賴於ioc容器,ioc容器注入某個物件,
注入某個物件所需要的外部資源(包括物件、資源、常量資料)
Aop:面向切面程式設計
實現:比如日誌,事務,許可權
AOP的基本概念:
(1)Aspect(切面):通常是一個類,裡面可以定義切入點和通知
(2)JointPoint(連線點):程式執行過程中明確的點,一般是方法的呼叫
(3)Advice(通知):AOP在特定的切入點上執行的增強處理,有before,after,afterReturning,afterThrowing,around
(4)Pointcut(切入點):就是帶有通知的連線點,在程式中主要體現為書寫切入點表示式
(5)AOP代理:AOP框架建立的物件,代理就是目標物件的加強。Spring中的AOP代理可以使JDK動態代理,
也可以是CGLIB代理,前者基於介面,後者基於子類
底層:
spring aop預設實現的是jdk的動態代理,當代理的是類的時候,自動切換cglib代理;
jdk:基於介面 cglib:基於子類