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

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

    JDK動(dòng)態(tài)代理示例:
    public static void main(String[] args) {    
            
    //核心業(yè)務(wù)類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("開始事物");
                    
    //調(diào)用核心業(yè)務(wù)類B的方法
                    ReflectionUtils.invokeMethod(method, B, args);    
                    System.out.println(
    "提交事物");
                    
    return method.getName();
                }
            });
            
    //調(diào)用代理類A方法
            IBooService bs = (IBooService)A;
            bs.check();
        }
    輸出結(jié)果:
    開始事物
    2018-08-16 10:30:44.161 [main] INFO  com.tx.test.service.impl.BooServiceImpl - check()
    提交事物

    Cglib動(dòng)態(tài)代理示例:
    Enhancer enhancer = new Enhancer();
            
    //設(shè)置業(yè)務(wù)類B
            enhancer.setSuperclass(FooServiceImpl.class);
            
    //設(shè)置回調(diào)
            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);
                    
    //調(diào)用業(yè)務(wù)類B方法
                    proxy.invokeSuper(object, args);
                    Long eTime 
    = System.currentTimeMillis();
                    System.out.println(
    "結(jié)束毫秒:"+ bTime);
                    Long mills 
    = eTime - bTime;
                    System.out.println(
    "毫秒:"+ mills);
                    
    return mills;
                }
            });
            
    //生成代理類A
            Object A = enhancer.create();
            IFooService fs1 
    = (FooServiceImpl) A;
            
    //調(diào)用代理A方法
            fs1.check();
    運(yùn)行結(jié)果:
    開始毫秒:1534387476396
    2018-08-16 10:44:36.403 [main] INFO  com.tx.test.service.impl.FooServiceImpl - check()
    結(jié)束毫秒:
    1534387476396
    毫秒:
    7
    完!
    posted on 2018-08-16 10:46 朔望魔刃 閱讀(200) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲另类视频在线观看| 看亚洲a级一级毛片| 亚洲白嫩在线观看| 青柠影视在线观看免费高清| 亚洲高清无码在线观看| 欧美日韩亚洲精品| 免费无码黄网站在线观看| 久久久久免费视频| 亚洲黄色免费网站| 18勿入网站免费永久| 亚洲国产精品综合久久2007| 国产免费私拍一区二区三区| 国产午夜成人免费看片无遮挡| 亚洲综合色区中文字幕| 亚洲小说区图片区另类春色| 免费精品国产自产拍在 | 亚洲av无码专区在线观看下载| 国产亚洲视频在线播放| 性色av免费观看| 国产亚洲欧美在线观看| 香蕉视频在线观看亚洲| 亚洲视频在线免费观看| 亚洲视频在线观看网址| 亚洲国产成人久久综合区| 亚洲性线免费观看视频成熟| h视频在线观看免费| 亚洲AV乱码久久精品蜜桃| 国产免费怕怕免费视频观看| 精品无码免费专区毛片| 最近中文字幕大全免费版在线| 国产成人综合亚洲| 亚洲色婷婷六月亚洲婷婷6月| 成人性生免费视频| 亚洲精品视频在线免费| 亚洲gay片在线gv网站| 亚洲性日韩精品国产一区二区| 在线v片免费观看视频| 久久国产乱子伦免费精品| 国产在线国偷精品免费看| 亚洲V无码一区二区三区四区观看| 91免费国产精品|