相信許多java開發(fā)人員都是用過動態(tài)代理录择,即使沒有直接使用過java.lang.reflect.Proxy或實現(xiàn)過java.lang.reflect.InvocationHandler接口胜嗓,應該也用過spring來做過Bean的組織管理眉反。如果使用spring驾窟,大多數情況下都會用過動態(tài)代理废累,因為如果Bean是面向接口編程那么在Spring內部是通過動態(tài)代理的方式來對Bean進行增強的怔蚌。動態(tài)代理中的“動態(tài)”别厘,是針對使用java代碼實際編寫了代理類的“靜態(tài)”代理而言,它的優(yōu)勢不在于省去了編寫代理類那一點工作量哩俭,而是實現(xiàn)了可以再原始類和接口還未知的時候绷跑,就確定代理類的代理行為,當代理類與原始類脫離直接聯(lián)系后凡资,就可以很靈活的重用于不同的應用場景之中砸捏。
以下我們編寫一段代碼來演示動態(tài)代理的用法谬运,原始邏輯是打印一行“hello word”,代理類的邏輯是在原始類方法執(zhí)行前打印依據“welcome”垦藏。
運行結果如下: