日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

基于子类的动态代理:

發(fā)布時(shí)間:2025/7/14 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于子类的动态代理: 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

基于子類的動(dòng)態(tài)代理:

提供者:第三方的CGLib,如果報(bào)asmxxxx異常,需要導(dǎo)入asm.jar。

<dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.1_3</version> </dependency>

要求:

  被代理類不能用final修飾的類(最終類)。

涉及的類:

  Enhancer

如何創(chuàng)建代理對(duì)象:

  使用Enhancer類中的create方法

create方法的參數(shù):

  Class:字節(jié)碼

    它是用于指定被代理對(duì)象的字節(jié)碼。

  Callback:用于提供增強(qiáng)的代碼

    它是讓我們寫如何代理。我們一般都是些一個(gè)該接口的實(shí)現(xiàn)類,通常情況下都是匿名內(nèi)部類,但不是必須的。

    此接口的實(shí)現(xiàn)類都是誰(shuí)用誰(shuí)寫。

    我們一般寫的都是該接口的子接口實(shí)現(xiàn)類:MethodInterceptor

1 Producer cglibProducer = (Producer)Enhancer.create(producer.getClass(), new MethodInterceptor() { 2 /** 3 * 執(zhí)行被代理對(duì)象的任何方法都會(huì)經(jīng)過(guò)該方法 4 * @param proxy 5 * @param method 6 * @param args 7 * 以上三個(gè)參數(shù)和基于接口的動(dòng)態(tài)代理中invoke方法的參數(shù)是一樣的 8 * @param methodProxy :當(dāng)前執(zhí)行方法的代理對(duì)象 9 * @return 10 * @throws Throwable 11 */ 12 public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { 13 //提供增強(qiáng)的代碼 14 15 //獲取方法執(zhí)行的參數(shù) 16 Object returnValue = method.invoke(producer, args[0]); 17 } 18 return returnValue; 19 } 20 }); 21 cglibProducer.saleProduct(12000f);

?

轉(zhuǎn)載于:https://www.cnblogs.com/mkl7/p/10691939.html

總結(jié)

以上是生活随笔為你收集整理的基于子类的动态代理:的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。