aop的官方解釋指出aop可以對業務邏輯的各個方面進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程式的可重用性,同時提高了開發的效率。
軟體開發追求的是高內聚、低耦合。spring框架就是為了盡可能的降低程式的耦合度。ioc是降低了類的建立,及類之間引用的耦合度。
當某個類的功能需要增強時,使用原始方法需要修改源**,aop則可以在不修改源**的條件下完成功能增強,從而降低耦合度。
aop底層使用動態**(兩種)
1、當類有介面,實現介面實現類的**物件(jdk動態**)
2、當類無介面,建立子類的**物件(cglib動態**)
建立乙個介面及其實現類
public
inte***ce
userdao
public
class
userdaoimpl
implements
userdao
@override
public
void
out(
)}
aop增強**
public
class
aop;
userdao userdao =
newuserdaoimpl()
; userdao userdao1 =
(userdao) proxy.
newproxyinstance
(aop.
class
.getclassloader()
, userdao.
getclass()
.getinte***ces()
,new
invocationhandler()
}); userdao1.
out();
}}
增強的具體過程:
呼叫proxy類的newproxyinstance方法,該方法需要三個引數,第乙個類載入器,第二個是要增強的介面陣列,第三個是乙個增強處理器。
需要增強的介面必須包含在第二個引數中。該方法會返回乙個**物件,每次當**物件呼叫方法時,都會呼叫invocationhandler的invoke方法,下面見結果。
可見完成了增強。這是spring的aop的底層實現,這部分增強**在使用中是封裝好的。了解即可。
AOP面向切面程式設計(個人理解)
面向切面程式設計的目標就是分離關注點。什麼是關注點呢,就是你要做的事,就是關注點。假如你是個公子哥,沒啥人生目標,天天就是衣來伸手,飯來張口,整天只知道玩一件事!那麼,每天你一睜眼,就光想著吃完飯就去玩 你必須要做的事 但是在玩之前,你還需要穿衣服 穿鞋子 疊好被子 做飯等等等等事情,這些事情就是你...
簡單理解AOP(面向切面程式設計)
aop為aspect oriented programming的縮寫,意為 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop與oop是面向不同領域的兩種設計思想。oop 物件導向程式設計 針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯...
簡單理解AOP(面向切面程式設計)
aop為aspect oriented programming的縮寫,意為 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop與oop是面向不同領域的兩種設計思想。oop 物件導向程式設計 針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯...