動態(tài)代理:
特點:字節(jié)碼隨用隨創(chuàng)建持搜,隨用隨加載
作用:不修改源碼的基礎(chǔ)上對方法增強
分來:基于接口的動態(tài)代理梦皮,基于子類的動態(tài)代理
基于接口的動態(tài)代理:
涉及的類:Prooxy
提供者:JDK官方
如何創(chuàng)建代理對象:使用Proxy類中的newProxyInstance方法
創(chuàng)建代理對象的要求弥雹;被代理類最少實現(xiàn)一個接口蚓让,如果沒有則不能使用
newProxyInstance方法的參數(shù):
Classloader:類加載器
它是用于加載代理對象字節(jié)碼的儡司,和被代理對象使用相同的類加載器。
Class[ ]:字節(jié)碼數(shù)組
它是用于讓代理對象和被代理對象有相同方法邦危,固定寫法。
InvocationHandler:用于提供增強的代碼
它是讓我們寫如何代理舍扰,我們一般都是寫一個該接口的實現(xiàn)類倦蚪,通常情況下都是匿名內(nèi)部類,但不是必須的边苹,此接口的實現(xiàn)類都是誰用誰寫
基于子類的動態(tài)代理:
涉及的類:Enhaner
提供者:第三方cglib庫
如何創(chuàng)建代理對象:使用Enhancer類中的create方法
創(chuàng)建代理對象的要求:被代理類不能是最終類
create方法的參數(shù):
Class:字節(jié)碼
它是用于指定被代理對象的字節(jié)碼
Callback:用于提供增強的代碼
它是讓我們寫如何代理陵且,我們一般都是寫一個該接口的實現(xiàn)類,通常情況下都是匿名內(nèi)部類个束,但不是必須的慕购,此接口的實現(xiàn)類都是誰用誰寫聊疲,我們一般寫的都是該接口的子接口實現(xiàn)類,:MethodInterceptor