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:基於子類