aop:是spring主要核心部分,即面向切面編程。與我們平常所接觸到的oop編程對等,是一種編程思想。從OOP角度分析,我們關(guān)注業(yè)務(wù)的處理邏輯,是屬于縱向的行為,從AOP角度分析,我們關(guān)注對象行為發(fā)生時的問題,是屬于橫向的行為。它利用一種稱為"橫切"的技術(shù),剖解開封裝的對象內(nèi)部,并將那些影響了多個類的公共行為封裝到一個可重用模塊,并將其命名為"Aspect",即切面。所謂"切面",簡單說就是那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任封裝起來,便于減少系統(tǒng)的重復(fù)代碼,降低模塊之間的耦合度,并有利于未來的可操作性和可維護性。
使用"橫切"技術(shù),AOP把軟件系統(tǒng)分為兩個部分:核心關(guān)注點和橫切關(guān)注點。業(yè)務(wù)處理的主要流程是核心關(guān)注點,與之關(guān)系不大的部分是橫切關(guān)注點。橫切關(guān)注點的一個特點是,他們經(jīng)常發(fā)生在核心關(guān)注點的多處,而各處基本相似,比如權(quán)限認證、日志、事物。AOP的作用在于分離系統(tǒng)中的各種關(guān)注點,將核心關(guān)注點和橫切關(guān)注點分離開來。
- AOP核心概念
1、橫切關(guān)注點
對哪些方法進行攔截,攔截后怎么處理,這些關(guān)注點稱之為橫切關(guān)注點
2、切面(aspect)
類是對物體特征的抽象,切面就是對橫切關(guān)注點的抽象
3、連接點(joinpoint)
被攔截到的點,因為Spring只支持方法類型的連接點,所以在Spring中連接點指的就是被攔截到的方法,實際上連接點還可以是字段或者構(gòu)造器,通俗點講類里面哪些方法可以被增強。
4、切入點(pointcut)
對連接點進行攔截的定義。通俗點講類里面實際被增強的方法。
Spring中AOP代理由Spring的IOC容器負責(zé)生成、管理,其依賴關(guān)系也由IOC容器負責(zé)管理。因此,AOP代理可以直接使用容器中的其它bean實例作為目標,這種關(guān)系可由IOC容器的依賴注入提供。Spring創(chuàng)建代理的規(guī)則為:
1、默認使用Java動態(tài)代理來創(chuàng)建AOP代理,這樣就可以為任何接口實例創(chuàng)建代理了
2、當需要代理的類不是代理接口的時候,Spring會切換為使用CGLIB代理,也可強制使用CGLIB
AOP編程其實是很簡單的事情,縱觀AOP編程,程序員只需要參與三個部分:
1、定義普通業(yè)務(wù)組件
2、定義切入點,一個切入點可能橫切多個業(yè)務(wù)組件
3、定義增強處理,增強處理就是在AOP框架為普通業(yè)務(wù)組件織入的處理動作
所以進行AOP編程的關(guān)鍵就是定義切入點和定義增強處理,一旦定義了合適的切入點和增強處理,AOP框架將自動生成AOP代理,即:代理對象的方法=增強處理+被代理對象的方法。
作用:
- 監(jiān)控函數(shù)的調(diào)用
- 捕獲異常發(fā)生
實際應(yīng)用在:事務(wù)、安全、日志等橫切關(guān)注。
(很多概念來源于其他博客,該篇章僅供自己學(xué)習(xí)筆記使用,更多詳細講解請看下這篇文章http://www.cnblogs.com/xrq730/p/4919025.html)