<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
    主站蜘蛛池模板: 免费在线观看亚洲| 在线观看日本免费a∨视频| 亚洲另类自拍丝袜第五页| 亚洲AV无码一区二区三区久久精品 | 久久久久亚洲Av无码专| 亚洲午夜福利在线视频| 中文字幕在线免费看线人| 亚洲欧洲久久久精品| 一级毛片在线完整免费观看| 人与禽交免费网站视频| 国产成人综合亚洲亚洲国产第一页 | 永久免费av无码不卡在线观看| 亚洲日本乱码一区二区在线二产线| 91免费国产自产地址入| 亚洲中文久久精品无码1| 成人免费看吃奶视频网站| 亚洲av永久无码精品网站| 先锋影音资源片午夜在线观看视频免费播放| 亚洲va久久久噜噜噜久久天堂| 日韩精品久久久久久免费| 亚洲欧洲日本在线| 香蕉免费一区二区三区| 亚洲国产综合自在线另类| 国产免费观看网站| 亚洲综合小说另类图片动图| 日本一线a视频免费观看| yy一级毛片免费视频| 亚洲视频一区调教| 国产va在线观看免费| 国产亚洲成av片在线观看| 99精品在线免费观看| 亚洲色少妇熟女11p| 亚洲视频在线精品| 6080午夜一级毛片免费看6080夜福利| 国产午夜亚洲精品| 久久久久噜噜噜亚洲熟女综合| 人成午夜免费大片在线观看 | 亚洲乱码日产精品BD在线观看| 国产偷伦视频免费观看| 国产成人无码综合亚洲日韩| 成人免费777777被爆出|