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

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

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

    posts - 22, comments - 17, trackbacks - 0, articles - 15
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    初識AOP

    Posted on 2006-12-02 15:52 碼農cz 閱讀(154) 評論(0)  編輯  收藏 所屬分類: Spring what I know

    AOP是被看做Spring框架中的一個重頭戲。所以介紹一下。

    學習Spring AOP之前,先來了解一下AOP。
    AOP應用到項目中的好處,能夠將與業務邏輯不相關的代碼(如:日志、權限等)分離出來,減小相關業務類負擔,并能讓一些通用需求(如:事務)得到更廣泛的復用。
    AOP的實現是利用了java核心的代理機制,分靜態代理與動態代理。
    靜態代理要求代理對象與被代理對象都實現同一個接口

    ?1??//接口:
    ?2?public?interface?IBusiness{
    ?3?????????public?void?doBusiness();
    ?4?}
    ?5?//實現:
    ?6?public?class?BusinessImpl?implements?IBusiness{
    ?7?????????public?void?doBusiness(){
    ?8?????????????????System.out.println("業務主體部分");
    ?9?????????}
    10?}
    11?//執行器:
    12?public?class?BusinessHandler?implements?InvocationHandler{
    13?????????private?BusinessImpl?bi=null;
    14?????????public?BusinessHandler(BusinessImpl?bi){
    15?????????????????this.bi=bi;
    16?????????}
    17?????????public?Object?invoke(Object?proxy,Method?method,Object[]?args)?throws?Throwable{
    18?????????????????System.out.println("事務、日志、權限等操作");
    19?????????????????method.invoke(bi,args);
    20?????????????????System.out.println("事務、日志、權限等操作");
    21?????????}
    22?????????}
    23?}
    24?//應用:
    25?public?class?AOPAppDemo{
    26?????????public?static?void?main(String[]?args){
    27?????????????????BusinessImple?bi=new?BusinessImple();
    28?????????????????BusinessHandler?bh=new?BusinessHandler(bi);
    29?????????????????IBusiness?proxy=(IBusiness)Proxy.newProxyInstance(bi.getClass().getClassLoader(),bi.getClass().getInterfaces(),bh);
    30???????????????????proxy.doBusiness();
    31?????????}
    32?}

    上述代碼就是通過靜態代理實現了AOP,BusinessProxy代理了BusinessImpl的doBusiness方法。但是靜態代理一般不能滿足我們項目開發的需求,如果業務需求很多它得為每一個業務方法一一做代理,動態代理正好解決了這一缺點,接下來我們來說說動態代理吧。
    動態代理,需實現一個InvocationHandler的接口,重寫invoke(Object proxy,Method method,Object[] args)方法,代理對象實例由Proxy.newProxyInstance(ClassLoader loader,Class interfaces,InvocationHandler h)方法生成,當代理對象的方法被執行時,通知執行器(InvocationHandler)執行invoke(Object proxy,Method method,Object[] args)方法,invoke方法內調用了method.invoke(Object obj,Object... args)方法,該方法對帶有指定參數的指定對象調用由此 Method 對象表示的基礎方法,應該這時才真正代理執行了業務邏輯(這里我是這樣理解的,不知對不對)。
    接下來用代碼說明上述動態代理原理,與靜態代理相比接口與實現保持不變

    ?1?//接口:
    ?2?public?interface ?IBusiness{
    ?3?????????public?void
    ?doBusiness();
    ?4?
    }
    ?5?//實現:

    ?6?public?class?BusinessImpl?implements ?IBusiness{
    ?7?????????public?void
    ?doBusiness(){
    ?8?????????????????System.out.println("業務主體部分"
    );
    ?9?
    ????????}
    10?
    }
    11?//代理:

    12?public?class?BusinessProxy?implements ?IBusiness{
    13?????????private
    ?BusinessImple?bi;
    14?????????public
    ?BusinessProxy(BusinessImple?bi){
    15?????????????????this.bi=
    bi;
    16?
    ????????}
    17?????????public?void
    ?doBusiness(){
    18?????????????????System.out.println("事務、日志、權限等操作"
    );
    19?
    ????????????????bi.doBusiness();
    20?????????????????System.out.println("事務、日志、權限等操作"
    );
    21?
    ????????}
    22?
    }
    23?//應用:

    24?public?class ?AOPAppDemo{
    25?????????public?static?void
    ?main(String[]?args){
    26?????????????????BusinessImpl?bi=new
    ?BusinessImple();
    27?????????????????BusinessProxy?proxy=new
    ?BusinessProxy(bi);
    28?
    ????????????????proxy.doBusiness();
    29?
    ????????}
    30?
    }
    31?

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    相關文章:
     
    主站蜘蛛池模板: 不卡精品国产_亚洲人成在线| a级毛片免费播放| 成人午夜免费福利视频| 免费一级毛片不卡在线播放| 亚洲av无码专区在线| 麻豆成人久久精品二区三区免费| 99re在线视频免费观看| 亚洲好看的理论片电影| 成人精品视频99在线观看免费| 99国产精品永久免费视频| 亚洲国语在线视频手机在线| 亚洲AV无码国产剧情| 成人性生交视频免费观看| 亚洲日韩av无码中文| 好猛好深好爽好硬免费视频| 亚洲综合另类小说色区色噜噜| 久久免费香蕉视频| 亚洲大尺度无码无码专区| 久久国产精品免费看| 亚洲第一成年网站大全亚洲| 97性无码区免费| 鲁死你资源站亚洲av| 亚洲午夜精品第一区二区8050| 两性色午夜视频免费播放| 亚洲午夜未满十八勿入| 曰曰鲁夜夜免费播放视频| 亚洲春色在线视频| 5g影院5g天天爽永久免费影院| 亚洲精品456人成在线| 国产成人精品无码免费看| 亚洲欧洲校园自拍都市| 四色在线精品免费观看| 亚洲精品蜜桃久久久久久| 亚洲中文字幕精品久久| 免费在线一级毛片| 一个人免费视频观看在线www| 99久久免费看国产精品| 国产精品亚洲四区在线观看| 久久大香伊焦在人线免费| 亚洲永久在线观看| 高清在线亚洲精品国产二区|