您好,登錄后才能下訂單哦!
原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html
Aspect Oriented Programming 面向切面編程。解耦是程序員編碼開發(fā)過程中一直追求的。AOP也是為了解耦所誕生。
具體思想是:定義一個切面,在切面的縱向定義處理方法,處理完成之后,回到橫向業(yè)務流。
AOP 在Spring框架中被作為核心組成部分之一,的確Spring將AOP發(fā)揮到很強大的功能。最常見的就是事務控制。工作之余,對于使用的工具,不免需要了解其所以然。學習了一下,寫了些程序幫助理解。
AOP 主要是利用代理模式的技術來實現的。
============================
1、靜態(tài)代理:就是設計模式中的proxy模式
a.業(yè)務接口
b.業(yè)務實現
c.代理對象
d.測試類
從這段代碼可以看出來,代理模式其實就是AOP的雛形。 上端代碼中talk(String msg, String singname)是一個切面。在代理類中的sing(singname)方法是個后置處理方法。
這樣就實現了,其他的輔助方法和業(yè)務方法的解耦。業(yè)務不需要專門去調用,而是走到talk方法,順理成章的調用sing方法
再從這段代碼看:1、要實現代理方式,必須要定義接口。2、每個業(yè)務類,需要一個代理類。
============================
2、動態(tài)代理:jdk1.5中提供,利用反射。實現InvocationHandler接口。
a.代理類
b.測試類
輸出結果會是:
切面之前執(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è)務類
b.代理類
c.測試類
最后輸出結果:
事物開始
people talk業(yè)務方法
事物結束
事物開始
spreak chinese業(yè)務方法
事物結束
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。