<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-95  評論-31  文章-10  trackbacks-0
    代理模式(靜態): 一個接口,兩個實現類A(代理類)和B(業務類),A類持有B類,這兩個類方法相同,那么A類方法內部調用B類的方法,就可以在B類核心業務前后進行前置處理、后置處理,異常環繞處理等等。

    Jdk動態代理要求必須有接口I和實現類B(業務類),那么通過jdk動態代理生成的類就是類A(代理類),上面代理模式是靜態代理,這里就是動態代理,代碼運行時候會生成一個代理類。
    Cglib動態代理不要求有接口I只需要一個核心業務類B,那么通過cglib動態代理生成的類就是類A(代理類), 同上。

    JDK動態代理示例:
    public static void main(String[] args) {    
            
    //核心業務類B
            IBooService B = new BooServiceImpl();
            
    //生成的代理類A
            Object A = Proxy.newProxyInstance(IBooService.class.getClassLoader(), new Class[]{IBooService.class}, new InvocationHandler() {
                @Override
                
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    
    //代理類方法的通用處理邏輯
                    System.out.println("開始事物");
                    
    //調用核心業務類B的方法
                    ReflectionUtils.invokeMethod(method, B, args);    
                    System.out.println(
    "提交事物");
                    
    return method.getName();
                }
            });
            
    //調用代理類A方法
            IBooService bs = (IBooService)A;
            bs.check();
        }
    輸出結果:
    開始事物
    2018-08-16 10:30:44.161 [main] INFO  com.tx.test.service.impl.BooServiceImpl - check()
    提交事物

    Cglib動態代理示例:
    Enhancer enhancer = new Enhancer();
            
    //設置業務類B
            enhancer.setSuperclass(FooServiceImpl.class);
            
    //設置回調
            enhancer.setCallback(new MethodInterceptor() {
                @Override
                
    public Object intercept(Object object, Method method, Object[] args, MethodProxy proxy) throws Throwable {
                    Long bTime 
    = System.currentTimeMillis();
                    System.out.println(
    "開始毫秒:"+ bTime);
                    
    //調用業務類B方法
                    proxy.invokeSuper(object, args);
                    Long eTime 
    = System.currentTimeMillis();
                    System.out.println(
    "結束毫秒:"+ bTime);
                    Long mills 
    = eTime - bTime;
                    System.out.println(
    "毫秒:"+ mills);
                    
    return mills;
                }
            });
            
    //生成代理類A
            Object A = enhancer.create();
            IFooService fs1 
    = (FooServiceImpl) A;
            
    //調用代理A方法
            fs1.check();
    運行結果:
    開始毫秒:1534387476396
    2018-08-16 10:44:36.403 [main] INFO  com.tx.test.service.impl.FooServiceImpl - check()
    結束毫秒:
    1534387476396
    毫秒:
    7
    完!
    posted on 2018-08-16 10:46 朔望魔刃 閱讀(208) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲熟妇AV一区二区三区宅男| 免费一级毛片在线播放视频| 在线亚洲午夜理论AV大片| 1000部啪啪未满十八勿入免费| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲人成在线播放网站| 免费观看的a级毛片的网站| 你是我的城池营垒免费观看完整版| 中文字幕亚洲综合小综合在线| 亚洲成a人片在线观看无码| 国产午夜影视大全免费观看| 久久国产免费福利永久| 男人天堂免费视频| 中文字幕不卡免费视频| 美女裸免费观看网站| 亚洲国产激情在线一区| 香蕉大伊亚洲人在线观看| 亚洲宅男永久在线| 国产精品亚洲不卡一区二区三区| 日本无卡码免费一区二区三区| 91香蕉在线观看免费高清| 皇色在线免费视频| 国产大陆亚洲精品国产| 亚洲中文字幕一二三四区| 亚洲av无码一区二区三区四区| 国产亚洲精品精品精品| 香蕉免费在线视频| 免费国产成人午夜在线观看| 91福利免费体验区观看区| 无码人妻一区二区三区免费| 人妻丰满熟妇无码区免费| 国产拍拍拍无码视频免费| 99热在线免费观看| 免费视频专区一国产盗摄| 国产高清不卡免费在线| 59pao成国产成视频永久免费 | 久久国产亚洲精品无码| 亚洲an日韩专区在线| 精品亚洲aⅴ在线观看| 亚洲色大网站WWW永久网站| 一级毛片大全免费播放|