色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

最終都轉(zhuǎn)換為調(diào)用invok方法

方一強2年前20瀏覽0評論

最終都轉(zhuǎn)換為調(diào)用invok方法?

謝謝邀請,是的,最終都會調(diào)用invoke方法的,我用下面的例子來分析舉例:

基本介紹代理對象,不需要實現(xiàn)接口,但是目標(biāo)對象要實現(xiàn)接口,否則不能用動態(tài)代理。代理對象的生成,是利用JDK的API,動態(tài)的內(nèi)存中構(gòu)建代理對象動態(tài)代理也叫做: JDK代理、接口代理JDK中生成代理對象的API代理類所在包: java.lang.reflect.ProxyJDK實現(xiàn)代理只需要使用newProxyInstance方法,但是該方法需要接收三個參數(shù),完整寫法為:static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h) 動態(tài)代理應(yīng)用舉例

用動態(tài)代理實現(xiàn)事務(wù):

UserService:

UserServiceImpl:

UserServiceInvocationHandler:

測試類:

結(jié)果為:

下面分析,為什么java動態(tài)代理中,最終都轉(zhuǎn)換為調(diào)用invok方法?

我們先查看上面生成的proxy對象,

下面我們看看生成的 $proxy0代碼:

很清楚,動態(tài)代理類實現(xiàn)了UserService接口,繼承了Proxy類。

接口方法:

invoke方法傳入3個參數(shù),這個invoke方法也就是4.1.2中我們提到的InvocationHandler接口的 invoke方法,那理解3個參數(shù)的意義也就很簡單了。

參數(shù)1傳入的為this——即$Proxy0本身,所以是內(nèi)存中的動態(tài)代理對象

參數(shù)2傳入的為m3——也就是proxy.test.UserService中名為saveUser的方法,即接口中的方法。

參數(shù)3傳入的為null——因為saveUser方法沒有參數(shù),所以為空。

完整代碼如下

代理java,最終都轉(zhuǎn)換為調(diào)用invok方法