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

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

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

    posts - 495,  comments - 11,  trackbacks - 0
    好長時間沒有用過Spring了. 突然拿起書.我都發現自己對AOP都不熟悉了.
    其實AOP的意思就是面向切面編程.
    OO注重的是我們解決問題的方法(封裝成Method),而AOP注重的是許多解決解決問題的方法中的共同點,是對OO思想的一種補充!
    還是拿人家經常舉的一個例子講解一下吧:
    比如說,我們現在要開發的一個應用里面有很多的業務方法,但是,我們現在要對這個方法的執行做全面監控,或部分監控.也許我們就會在要一些方法前去加上一條日志記錄,
    我們寫個例子看看我們最簡單的解決方案
    我們先寫一個接口IHello.java代碼如下:
    1packagesinosoft.dj.aop.staticaop;
    2
    3publicinterfaceIHello{
    4??/**
    5????? * 假設這是一個業務方法
    6????? *@paramname
    7?????*/

    8????voidsayHello(String name);
    9}

    10

    里面有個方法,用于輸入"Hello" 加傳進來的姓名;我們去寫個類實現IHello接口
    packagesinosoft.dj.aop.staticaop;

    publicclassHelloimplementsIHello{

    ????
    publicvoidsayHello(String name){
    ???????? System.out.println(
    "Hello"+name);
    ???? }


    }


    現在我們要為這個業務方法加上日志記錄的業務,我們在不改變原代碼的情況下,我們會去怎么做呢?也許,你會去寫一個類去實現IHello接口,并依賴Hello這個類.代碼如下:
    1packagesinosoft.dj.aop.staticaop;
    2
    3publicclassHelloProxyimplementsIHello{
    4????privateIHello hello;
    5
    6????publicHelloProxy(IHello hello){
    7????????this.hello=hello;
    8???? }

    9
    10????publicvoidsayHello(String name){
    11???????? Logger.logging(Level.DEBUGE,"sayHello method start.");
    12???????? hello.sayHello(name);
    13???????? Logger.logging(Level.INFO,"sayHello method end!");
    14
    15???? }

    16
    17}

    18

    其中.Logger類和Level枚舉代碼如下:
    Logger.java
    1packagesinosoft.dj.aop.staticaop;
    2
    3importjava.util.Date;
    4
    5publicclassLogger{
    6??/**
    7????? * 根據等級記錄日志
    8????? *@paramlevel
    9????? *@paramcontext
    10?????*/

    11????publicstaticvoidlogging(Level level, String context){
    12????????if(level.equals(Level.INFO)){
    13???????????? System.out.println(newDate().toLocaleString()+""+context);
    14???????? }

    15????????if(level.equals(Level.DEBUGE)){
    16???????????? System.err.println(newDate()+""+context);
    17???????? }

    18???? }

    19
    20}

    21
    Level.java

    1packagesinosoft.dj.aop.staticaop;
    2
    3publicenumLevel{
    4???? INFO,DEBUGE;
    5}

    6
    那我們去寫個測試類看看,代碼如下:
    Test.java
    1packagesinosoft.dj.aop.staticaop;
    2
    3publicclassTest{
    4????publicstaticvoidmain(String[] args){
    5???????? IHello hello=newHelloProxy(newHello());
    6???????? hello.sayHello("Doublej");
    7???? }

    8}

    9
    運行以上代碼我們可以得到下面結果:

    Tue Mar0420:57:12CST2008sayHello method start.
    Hello Doublej
    2008-3-420:57:12sayHello method end!

    從上面的代碼我們可以看出,hello對象是被HelloProxy這個所謂的代理態所創建的.這樣,如果我們以后要把日志記錄的功能去掉.那我們只要把得到hello對象的代碼改成以下:
    1packagesinosoft.dj.aop.staticaop;
    2
    3publicclassTest{
    4????publicstaticvoidmain(String[] args){
    5???????? IHello hello=newHello();
    6???????? hello.sayHello("Doublej");
    7???? }

    8}

    9

    上面代碼,可以說是AOP最簡單的實現!
    posted on 2009-07-24 20:37 jadmin 閱讀(74) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 巨胸喷奶水视频www免费视频| 久久精品国产亚洲Aⅴ蜜臀色欲| 成在线人视频免费视频 | 成在线人免费无码高潮喷水| 亚洲乱码国产乱码精华| 亚洲欧洲日产国码二区首页| 亚洲精品乱码久久久久66| 亚洲国产人成精品| 啦啦啦手机完整免费高清观看| 120秒男女动态视频免费| baoyu116.永久免费视频| 一级做a爰全过程免费视频毛片| 亚洲日本VA中文字幕久久道具| 亚洲春色另类小说| 666精品国产精品亚洲| 亚洲国产精久久久久久久| 亚洲精品无码高潮喷水在线| 在线A亚洲老鸭窝天堂| 亚洲性日韩精品国产一区二区| 国产又大又长又粗又硬的免费视频| 免费在线看v网址| 成人免费在线看片| 黄色永久免费网站| 100000免费啪啪18免进| 国产精品爱啪在线线免费观看| 18女人腿打开无遮掩免费| 99久久人妻精品免费二区| 日韩人妻无码精品久久免费一| 免费日本一区二区| 1000部夫妻午夜免费| 亚洲视频在线免费看| 91免费国产自产地址入| 日本三级2019在线观看免费| 青青青免费国产在线视频小草| 日韩视频在线精品视频免费观看| 成人免费AA片在线观看| 亚洲第一成年免费网站| 青青青青青青久久久免费观看| 国产片免费在线观看| 亚洲性久久久影院| 亚洲av无码精品网站|