溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

面向切面編程(AOP模式)

發(fā)布時間:2020-07-23 21:42:13 來源:網絡 閱讀:207 作者:淺嫣 欄目:開發(fā)技術

Java筆記——面向切面編程(AOP模式)

原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html

Aspect Oriented Programming  面向切面編程。解耦是程序員編碼開發(fā)過程中一直追求的。AOP也是為了解耦所誕生。

具體思想是:定義一個切面,在切面的縱向定義處理方法,處理完成之后,回到橫向業(yè)務流。

AOP 在Spring框架中被作為核心組成部分之一,的確Spring將AOP發(fā)揮到很強大的功能。最常見的就是事務控制。工作之余,對于使用的工具,不免需要了解其所以然。學習了一下,寫了些程序幫助理解。

AOP 主要是利用代理模式的技術來實現的。
面向切面編程(AOP模式)

============================

1、靜態(tài)代理:就是設計模式中的proxy模式 


a.業(yè)務接口
面向切面編程(AOP模式)

b.業(yè)務實現
面向切面編程(AOP模式)


c.代理對象
面向切面編程(AOP模式)

d.測試類
面向切面編程(AOP模式)


從這段代碼可以看出來,代理模式其實就是AOP的雛形。 上端代碼中talk(String msg, String singname)是一個切面。在代理類中的sing(singname)方法是個后置處理方法。

這樣就實現了,其他的輔助方法和業(yè)務方法的解耦。業(yè)務不需要專門去調用,而是走到talk方法,順理成章的調用sing方法

再從這段代碼看:1、要實現代理方式,必須要定義接口。2、每個業(yè)務類,需要一個代理類。


============================
 
2、動態(tài)代理:jdk1.5中提供,利用反射。實現InvocationHandler接口。 


a.代理類
面向切面編程(AOP模式)

b.測試類
面向切面編程(AOP模式)


輸出結果會是:
 

切面之前執(zhí)行
people talk業(yè)務說法
切面之后執(zhí)行

 

說明只要在業(yè)務調用方法切面之前,是可以動態(tài)的加入需要處理的方法。

從代碼來看,如果再建立一個業(yè)務模塊,也只需要一個代理類。ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk());  將業(yè)務接口和業(yè)務類綁定到動態(tài)代理類。

但是這種方式:還是需要定義接口。

 ============================

3、利用cglib 

a.業(yè)務類
面向切面編程(AOP模式) 


b.代理類
面向切面編程(AOP模式) 


c.測試類
面向切面編程(AOP模式)

最后輸出結果:
 

事物開始
people talk業(yè)務方法
事物結束
事物開始
spreak chinese業(yè)務方法
事物結束


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI