亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java動態代理和cglib動態代理示例分享

2019-11-26 15:35:19
字體:
來源:轉載
供稿:網友

java動態代理類可以分為兩種。

靜態代理:由程序員創建或特定工具自動生成源代碼,再對其編譯。在程序運行前,代理類的.class文件就已經存在了。

動態代理:在程序運行時,運用反射機制動態創建而成。


一、首先我們進行java動態代理的演示。

現在我們有一個簡單的業務接口Saying,如下:

復制代碼 代碼如下:

package testAOP;
public interface Saying {
public void sayHello(String name);   
public void talking(String name);
}

一個簡單的實現類SayingImpl,如下:

復制代碼 代碼如下:

package testAOP;
public class SayingImpl implements Saying {
    @Override
    public void sayHello(String name) {
        // TODO Auto-generated method stub
        System.out.println(name + ":大家好??!");
    }
    @Override
    public void talking(String name) {
        // TODO Auto-generated method stub
        System.out.println(name + ":我的意思是,我們要努力建設和諧社會!");
    }
}

我們要實現的是,在sayHello和talking之前和之后分別動態植入處理。

JDK動態代理主要用到java.lang.reflect包中的兩個類:Proxy和InvocationHandler.

InvocationHandler是一個接口,通過實現該接口定義橫切邏輯,并通過反射機制調用目標類的代碼,動態的將橫切邏輯和業務邏輯編織在一起。

Proxy利用InvocationHandler動態創建一個符合某一接口的實例,生成目標類的代理對象。

如下,我們創建一個InvocationHandler實例:

復制代碼 代碼如下:

package testAOP;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHandler implements InvocationHandler {

    private Object target;
    MyInvocationHandler(Object target){
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        //目標方法前執行
        System.out.println("――――――――――――――――――――――――――");
        System.out.println("下一位請登臺發言!");
        //目標方法調用
        Object obj = method.invoke(target, args);
        //目標方法后執行
        System.out.println("大家掌聲鼓勵!");
        return obj;
    }
}

下面是測試:

復制代碼 代碼如下:

package testAOP;
import java.lang.reflect.Proxy;
public class JDKProxyTest {

    public static void main(String[] args) {
        // 希望被代理的目標業務類
        Saying target = new SayingImpl();
        // 將目標類和橫切類編織在一起
        MyInvocationHandler handler = new MyInvocationHandler(target);
        // 創建代理實例
        Saying proxy = (Saying) Proxy.newProxyInstance(
                target.getClass().getClassLoader(),//目標類的類加載器
                target.getClass().getInterfaces(),//目標類的接口
                handler);//橫切類
        proxy.sayHello("小明");
        proxy.talking("小麗");
    }
}

運行情況如下:

復制代碼 代碼如下:

――――――――――――――――――――――――――
下一位請登臺發言!
小明:大家好啊!
大家掌聲鼓勵!
――――――――――――――――――――――――――
下一位請登臺發言!
小麗:我的意思是,我們要努力建設和諧社會!
大家掌聲鼓勵!

使用JDK動態代理有一個很大的限制,就是它要求目標類必須實現了對應方法的接口,它只能為接口創建代理實例。我們在上文測試類中的Proxy的newProxyInstance方法中可以看到,該方法第二個參數便是目標類的接口。如果該類沒有實現接口,這就要靠cglib動態代理了。

CGLib采用非常底層的字節碼技術,可以為一個類創建一個子類,并在子類中采用方法攔截的技術攔截所有父類方法的調用,并順勢植入橫切邏輯。

二、接下來我們進行cglib動態代理的演示。

首先我們需要導包,我用的包是cglib-nodep-2.1_3.jar。

我們首先創建一個代理創建器CglibProxy:

復制代碼 代碼如下:

package testAOP.cglib;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class CglibProxy implements MethodInterceptor{

    Enhancer enhancer = new Enhancer();
    public Object getProxy(Class clazz) {
        //設置需要創建的子類
        enhancer.setSuperclass(clazz);
        enhancer.setCallback(this);
        //通過字節碼技術動態創建子類實例
        return enhancer.create();
    }
    @Override
    public Object intercept(Object obj, Method method, Object[] args,
            MethodProxy proxy) throws Throwable {
        // TODO Auto-generated method stub
        System.out.println("――――――――――――――――――――――――――");
        System.out.println("下一位請登臺發言!");
        //目標方法調用
        Object result = proxy.invokeSuper(obj, args);
        //目標方法后執行
        System.out.println("大家掌聲鼓勵!");
        return result;
    }   
}

然后進行測試:

復制代碼 代碼如下:

package testAOP.cglib;
import testAOP.Saying;
import testAOP.SayingImpl;
public class CglibProxyTest {

    public static void main(String[] args) {
        CglibProxy proxy = new CglibProxy();
        //通過動態生成子類的方式創建代理類
        Saying target = (Saying) proxy.getProxy(SayingImpl.class);
        target.sayHello("小明");
        target.talking("小麗");
    }
}

結果與JDK動態代理沒有任何區別。

JDK動態代理和CGLib動態代理都是運行時增強,通過將橫切代碼植入代理類的方式增強。與此不同的是AspectJ,它能夠在通過特殊的編譯器在編譯時期將橫切代碼植入增強,這樣的增強處理在運行時候更有優勢,因為JDK動態代理和CGLib動態代理每次運行都需要增強。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一二在线观看| 国产精品久久久999| 日韩视频免费看| 国产亚洲人成a一在线v站| 日韩免费av片在线观看| 久久久噜久噜久久综合| 日韩电影在线观看中文字幕| 欧美成人午夜激情视频| 久久久久久亚洲精品不卡| 国产欧美一区二区三区视频| 国产精品成人免费视频| 成人在线小视频| 欧美视频国产精品| 69精品小视频| 日韩在线观看网址| 欧美亚洲午夜视频在线观看| 国产欧美 在线欧美| 日韩精品中文字| 久久99久国产精品黄毛片入口| 久久久久国产精品免费网站| 欧美激情区在线播放| 精品人伦一区二区三区蜜桃网站| 国产在线精品成人一区二区三区| 亚洲专区在线视频| 国产美女扒开尿口久久久| 国产69精品久久久久9| 色先锋资源久久综合5566| 青草青草久热精品视频在线观看| 国产成+人+综合+亚洲欧美丁香花| 亚洲网站视频福利| 色播久久人人爽人人爽人人片视av| 亚洲精品久久久久| 国产精品电影久久久久电影网| 国产欧美一区二区三区久久人妖| 精品亚洲精品福利线在观看| 亚洲xxxx妇黄裸体| 日本免费在线精品| 国产精品久久电影观看| 国产亚洲精品美女久久久久| 亚洲欧美综合区自拍另类| 久久在线免费视频| 欧美精品在线视频观看| 97福利一区二区| 国产精品男女猛烈高潮激情| 中文一区二区视频| 中文字幕免费国产精品| 久久亚洲精品中文字幕冲田杏梨| 成人福利网站在线观看| 一个人看的www久久| 国产一区二区在线免费| 欧美性受xxxx白人性爽| 成人免费看片视频| 亚洲人成在线观看网站高清| 日韩毛片在线观看| 91欧美视频网站| 色综合久久天天综线观看| 久久精品国产v日韩v亚洲| 成人午夜激情网| 久久久久久久久久久av| 日韩不卡在线观看| 91在线看www| 日韩成人av网址| 91国内揄拍国内精品对白| 亚洲奶大毛多的老太婆| 美女扒开尿口让男人操亚洲视频网站| 一色桃子一区二区| 日韩天堂在线视频| 性欧美xxxx交| 亚洲乱亚洲乱妇无码| 国产网站欧美日韩免费精品在线观看| 黑人欧美xxxx| 亚洲片在线资源| 久久久久久有精品国产| 岛国av一区二区在线在线观看| 亚洲最大福利视频| 91精品久久久久久久| 日本亚洲欧美成人| 中文字幕免费国产精品| 国产精品视频一区国模私拍| 亚洲自拍偷拍福利| 日韩中文字幕在线精品| 国产精品美女主播| 视频一区视频二区国产精品| 在线观看欧美日韩国产| 亚洲第一av网| 富二代精品短视频| 国产精品久久久久久久电影| 日韩欧美综合在线视频| 精品视频一区在线视频| 国内精品一区二区三区四区| 国产女精品视频网站免费| 亚洲男人的天堂在线播放| 久久免费精品日本久久中文字幕| 久久午夜a级毛片| 国产美女久久精品香蕉69| 国产精品丝袜久久久久久高清| 日韩视频―中文字幕| 日韩中文字幕在线免费观看| 97精品国产aⅴ7777| 红桃视频成人在线观看| 欧美日韩激情小视频| 麻豆成人在线看| 日韩欧美在线观看视频| 午夜免费在线观看精品视频| 亚洲精品久久视频| 91亚洲一区精品| 日本久久久久久| 国产成人精品综合| 91精品国产91久久久久久久久| 日韩成人在线网站| 欧美精品在线视频观看| 国产精品高潮呻吟久久av黑人| 欧美成人午夜激情在线| 国产91在线播放精品91| 国内外成人免费激情在线视频网站| 欧美激情视频三区| 91精品国产综合久久男男| 久久久国产精品亚洲一区| 国产午夜精品一区理论片飘花| 国产视频久久网| 日本中文字幕不卡免费| 欧美国产日韩精品| 欧美日韩国产一区在线| 国产精品久久久| 精品人伦一区二区三区蜜桃免费| 久久中文字幕在线| 亚洲成色www8888| 2019国产精品自在线拍国产不卡| 欧美高清videos高潮hd| 亚洲国产天堂久久综合网| 黄色一区二区在线观看| 欧美性色19p| 在线视频中文亚洲| 亚洲综合第一页| 亚洲电影天堂av| 国产亚洲精品久久久优势| 亚洲福利影片在线| 日韩欧美国产免费播放| 亚洲激情小视频| 久久躁日日躁aaaaxxxx| 成人午夜两性视频| 国产精品第3页| 成人av资源在线播放| 国产精品直播网红| 欧美精品电影免费在线观看| 国产精品偷伦视频免费观看国产| 亚洲精品福利资源站| 国产高清在线不卡| 97在线看免费观看视频在线观看| 久久午夜a级毛片| 欧美超级乱淫片喷水| 欧美日韩免费观看中文| 伊人久久久久久久久久久| 欧美黑人巨大精品一区二区| 国产精品2018| 91精品国产综合久久香蕉| 96精品视频在线| 日韩在线中文视频| 亚洲自拍欧美色图| 国产精品免费一区| 九九热精品视频在线播放| 亚洲视频在线观看| 亚洲成人a级网| 亚洲最新视频在线|