Spring AOP IOC DI-相關整理

AOP

AOP(Aspect Oriented Programming)稱爲面向切面編程,在程序開發中主要用來解決一些系統層面上的問題,比如日誌,事務,權限等待。

1.   AOP將那些影響了多個類的公共行爲封裝到一個可重用模塊,並將其命名爲"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減少系統的重複代碼,降低模塊之間的耦合度,並有利於未來的可操作性和可維護性。

2. AOP的相關概念:

(1)橫切關注點:對哪些方法進行攔截,攔截後怎麼處理,這些關注點稱之爲橫切關注點
(2)Aspect(切面):通常是一個類,裏面可以定義切入點和通知
(3)JointPoint(連接點):程序執行過程中明確的點,一般是方法的調用。被攔截到的點,因爲Spring只支持方法類型的連接點,所以在Spring中連接點指的就是被攔截到的方法,實際上連接點還可以是字段或者構造器
(4)Advice(通知):AOP在特定的切入點上執行的增強處理,有before(前置),after(後置),afterReturning(最終),afterThrowing(異常),around(環繞)
(5)Pointcut(切入點):就是帶有通知的連接點,在程序中主要體現爲書寫切入點表達式
(6)weave(織入):將切面應用到目標對象並導致代理對象創建的過程
(7)introduction(引入):在不修改代碼的前提下,引入可以在運行期爲類動態地添加一些方法或字段
(8)AOP代理(AOP Proxy):AOP框架創建的對象,代理就是目標對象的加強。Spring中的AOP代理可以使JDK動態代理,也可以是CGLIB代理,前者基於接口,後者基於子類
(9)目標對象(Target Object): 包含連接點的對象。也被稱作被通知或被代理對象。POJO

3、Advice通知類型介紹:

(1)Before:在目標方法被調用之前做增強處理,@Before只需要指定切入點表達式即可

(2)AfterReturning:在目標方法正常完成後做增強,@AfterReturning除了指定切入點表達式後,還可以指定一個返回值形參名returning,代表目標方法的返回值

(3)AfterThrowing:主要用來處理程序中未處理的異常,@AfterThrowing除了指定切入點表達式後,還可以指定一個throwing的返回值形參名,可以通過該形參名

來訪問目標方法中所拋出的異常對象

(4)After:在目標方法完成之後做增強,無論目標方法時候成功完成。@After可以指定一個切入點表達式

(5)Around:環繞通知,在目標方法完成前後做增強處理,環繞通知是最重要的通知類型,像事務,日誌等都是環繞通知,注意編程中核心是一個ProceedingJoinPoint

 

4、AOP使用場景:

Authentication 權限
Caching 緩存
Context passing 內容傳遞
Error handling 錯誤處理
Lazy loading 懶加載
Debugging  調試
logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
Performance optimization 性能優化
Persistence  持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務

使用AOP的幾種方式:

1.經典的基於代理的AOP
2.@AspectJ註解驅動的切面
3.純POJO切面(純粹通過<aop:fonfig>標籤配置)
4.注入式AspectJ切面

IOC

即“控制反轉”,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味着將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制。傳統Java SE程序設計,我們直接在對象內部通過new進行創建對象,是程序主動去創建依賴對象;而IoC是有專門一個容器來創建這些對象,即由Ioc容器來控制對 象的創建。

 

DI

IoC和DI由什麼關係呢?其實它們是同一個概念的不同角度描述

組件之間依賴關係由容器在運行期決定,形象的說,即由容器動態的將某個依賴關係注入到組件之中。依賴注入的目的並非爲軟件系統帶來更多功能,而是爲了提升組件重用的頻率,併爲系統搭建一個靈活、可擴展的平臺。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。

  理解DI的關鍵是:“誰依賴誰,爲什麼需要依賴,誰注入誰,注入了什麼”,那我們來深入分析一下:

  ●誰依賴於誰:當然是應用程序依賴於IoC容器;

  ●爲什麼需要依賴:應用程序需要IoC容器來提供對象需要的外部資源;

  ●誰注入誰:很明顯是IoC容器注入應用程序某個對象,應用程序依賴的對象;

  ●注入了什麼:就是注入某個對象所需要的外部資源(包括對象、資源、常量數據)

IoC/DI思想中,應用程序就變成被動的了,被動的等待IoC容器來創建並注入它所需要的資源,由IoC容器幫對象找相應的依賴對象並注入,而不是由對象主動去找。

 

依賴注入(DI)是控制反轉(IoC)的一種方式。

三種注入方式:

  • 構造函數方法注入、
  • Setter方法注入
  • 接口注入。

其中接口注入不常用,已經把廢棄了。最常用的是setter方法注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章