<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夜间福利香蕉149| 国产精品99爱免费视频| 狠狠综合久久综合88亚洲| 中文字幕在线成人免费看| 国产亚洲成av片在线观看| 久久精品中文字幕免费| 亚洲va在线va天堂va四虎| 久久久免费精品re6| 亚洲二区在线视频| 成人au免费视频影院| 羞羞视频免费网站含羞草| 亚洲综合无码AV一区二区| 久爱免费观看在线网站| 亚洲人成在线中文字幕| 女人被男人桶得好爽免费视频 | 亚洲成a人片在线观看久| www在线观看免费视频| 亚洲V无码一区二区三区四区观看| 亚洲免费视频网站| 亚洲乱妇熟女爽到高潮的片| 亚洲 国产 图片| 免费视频一区二区| 亚洲最大成人网色香蕉| 亚洲第一福利网站在线观看| 丝袜捆绑调教视频免费区| 亚洲国产中文在线视频| 亚洲Av无码乱码在线播放| 精品国产免费一区二区三区香蕉| 亚洲国产精品久久网午夜| 全部免费a级毛片| 免费看搞黄视频网站| 亚洲国产精品无码中文lv | 亚洲中文字幕乱码熟女在线| 免费国产成人高清在线观看麻豆| 国产在线观看xxxx免费| 国产91在线|亚洲|