面向切面編程

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

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

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

AOP 主要是利用代理模式的技術來實現的。
圖片

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

1、靜態代理:就是設計模式中的proxy模式 


a.業務接口
圖片

b.業務實現
圖片


c.代理對象
圖片

d.測試類
圖片


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

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

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


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


a.代理類
圖片

b.測試類
圖片


輸出結果會是:
 

切面之前執行
people talk業務說法
切面之後執行

 

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

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

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

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

3、利用cglib 

a.業務類
圖片 


b.代理類
圖片 


c.測試類
圖片

最後輸出結果:
 

事物開始
people talk業務方法
事物結束
事物開始
spreak chinese業務方法

事物結束


轉載自:https://www.cnblogs.com/pwc1996/p/4839150.html

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