學(xué)習(xí)筆記4:JDK代理類簡單實現(xiàn)學(xué)習(xí)
DK代理是Java原生的對接口進(jìn)行強(qiáng)化的方法,可以對代碼進(jìn)行切面修改,從而在特定接口函數(shù)調(diào)用前和調(diào)用后進(jìn)行一些額外操作。這個方法相對于cglib來說不是那么通用,只能對接口進(jìn)行處理。下面簡單介紹一下進(jìn)行JDK代理類的流程
?
首先創(chuàng)建一個接口,以及其一個實現(xiàn),如下所示:
?
?
之后實現(xiàn)代理接口,如下所示:
?
?
之后,在主函數(shù)里生成一個實現(xiàn)類,以及代理類,并對接口進(jìn)行調(diào)用:
?
?
?
命令行輸出結(jié)果:
Test12:func
Test12InvocationHandler:invoke
?
可以看到,生成的接口代理類會通過InnovacationHandler接口的invoke方法來調(diào)用指定接口代碼,此處額外進(jìn)行的println操作也被觸發(fā)。
?
一些總結(jié):
JDK代理本質(zhì)是通過切面的形式對接口進(jìn)行裝飾者模式的修飾,在調(diào)用被代理的對象的前后可以進(jìn)行一定處理,根據(jù)情況也可以選擇跳過操作,或者使一個接口函數(shù)的調(diào)用完全改成另外的方法執(zhí)行。如果進(jìn)行迭代裝飾,則會按照裝飾的順序從新到舊進(jìn)行遞歸調(diào)用。
同時因為JDK代理是對一個對象進(jìn)行了裝飾,因此這個裝飾過程也是需要手動進(jìn)行的,例如通過工廠模式在創(chuàng)建進(jìn)行包裝等。
我現(xiàn)在還沒有實際需要用到JDK代理的應(yīng)用場景,如果有必要在工作中應(yīng)用的話可能在測試后能有更多理解吧。