原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html
Aspect Oriented Programming 面向切面編程。解耦是程序員編碼開發(fā)過程中一直追求的。AOP也是為了解耦所誕生。
具體思想是:定義一個切面,在切面的縱向定義處理方法,處理完成之后,回到橫向業(yè)務(wù)流。
AOP 在Spring框架中被作為核心組成部分之一,的確Spring將AOP發(fā)揮到很強大的功能。最常見的就是事務(wù)控制。工作之余,對于使用的工具,不免需要了解其所以然。學(xué)習(xí)了一下,寫了些程序幫助理解。
AOP 主要是利用代理模式的技術(shù)來實現(xiàn)的。
============================
1、靜態(tài)代理:就是設(shè)計模式中的proxy模式
a.業(yè)務(wù)接口
b.業(yè)務(wù)實現(xiàn)
c.代理對象
d.測試類
從這段代碼可以看出來,代理模式其實就是AOP的雛形。 上端代碼中talk(String msg, String singname)是一個切面。在代理類中的sing(singname)方法是個后置處理方法。
這樣就實現(xiàn)了,其他的輔助方法和業(yè)務(wù)方法的解耦。業(yè)務(wù)不需要專門去調(diào)用,而是走到talk方法,順理成章的調(diào)用sing方法
再從這段代碼看:1、要實現(xiàn)代理方式,必須要定義接口。2、每個業(yè)務(wù)類,需要一個代理類。
============================
2、動態(tài)代理:jdk1.5中提供,利用反射。實現(xiàn)InvocationHandler接口。
a.代理類
b.測試類
輸出結(jié)果會是:
切面之前執(zhí)行
people talk業(yè)務(wù)說法
切面之后執(zhí)行
說明只要在業(yè)務(wù)調(diào)用方法切面之前,是可以動態(tài)的加入需要處理的方法。
從代碼來看,如果再建立一個業(yè)務(wù)模塊,也只需要一個代理類。ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk()); 將業(yè)務(wù)接口和業(yè)務(wù)類綁定到動態(tài)代理類。
但是這種方式:還是需要定義接口。
============================
3、利用cglib
a.業(yè)務(wù)類
b.代理類
c.測試類
最后輸出結(jié)果:
事物開始
people talk業(yè)務(wù)方法
事物結(jié)束
事物開始
spreak chinese業(yè)務(wù)方法
事物結(jié)束
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。