<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
    代理模式(靜態(tài)): 一個接口,兩個實現類A(代理類)和B(業(yè)務類),A類持有B類,這兩個類方法相同,那么A類方法內部調用B類的方法,就可以在B類核心業(yè)務前后進行前置處理、后置處理,異常環(huán)繞處理等等。

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

    JDK動態(tài)代理示例:
    public static void main(String[] args) {    
            
    //核心業(yè)務類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("開始事物");
                    
    //調用核心業(yè)務類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動態(tài)代理示例:
    Enhancer enhancer = new Enhancer();
            
    //設置業(yè)務類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);
                    
    //調用業(yè)務類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 朔望魔刃 閱讀(201) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲日韩久久综合中文字幕| 亚洲精品在线播放| 免费人成年激情视频在线观看| 国产gav成人免费播放视频| 在线观看亚洲精品国产| 亚洲AV人无码综合在线观看| 亚洲乱码一二三四区乱码| 国产亚洲一卡2卡3卡4卡新区| 日日躁狠狠躁狠狠爱免费视频| 99热这里只有精品6免费| 天天看片天天爽_免费播放| 亚洲国产专区一区| 亚洲同性男gay网站在线观看| 国产区在线免费观看| 114一级毛片免费| 亚洲人成人网站在线观看| 日韩在线观看免费| 亚洲人成人77777网站| 亚洲日韩AV一区二区三区中文| 成年女人毛片免费播放人| 久久久久亚洲av无码专区蜜芽| 久久爰www免费人成| 四虎亚洲国产成人久久精品| 亚洲成人午夜电影| 国产高清不卡免费视频| 亚洲无砖砖区免费| 日本不卡高清中文字幕免费| 亚洲国产精品综合福利专区| 日韩一区二区免费视频| 2022免费国产精品福利在线| 亚洲AⅤ无码一区二区三区在线| 久久久久久久国产免费看| 久久亚洲精品无码VA大香大香| AAA日本高清在线播放免费观看| 免费观看日本污污ww网站一区| 免费在线人人电影网| 国产精品99久久免费| 亚洲欧美日本韩国| 亚洲熟妇av一区二区三区漫画| 91久久精品国产免费一区| 亚洲另类激情综合偷自拍|