<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲AV无码久久久久网站蜜桃 | 国产成人一区二区三区免费视频| 亚洲国产精品久久久久婷婷老年| 产传媒61国产免费| 亚洲午夜无码片在线观看影院猛| 一级人做人a爰免费视频 | 亚洲国产精品无码专区影院| 国产高潮流白浆喷水免费A片 | 亚洲国产aⅴ综合网| 国产精品偷伦视频免费观看了 | 亚洲精品tv久久久久| 美女一级毛片免费观看| 亚洲午夜激情视频| 在线看片免费人成视频久网下载| 亚洲不卡中文字幕无码| 99re6免费视频| 亚洲av成人综合网| 国产免费看插插插视频| jizz在线免费观看| 亚洲国产精品久久久久网站| 精品香蕉在线观看免费| 亚洲日韩一区精品射精| 亚洲精品国产精品乱码不卞| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 国产卡一卡二卡三免费入口| 亚洲欧美国产日韩av野草社区| 又色又污又黄无遮挡的免费视| 久久精品免费网站网| 亚洲码一区二区三区| 韩国二级毛片免费播放| 久青草国产免费观看| 综合自拍亚洲综合图不卡区| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 国产特黄特色的大片观看免费视频| 亚洲人成网7777777国产| 91麻豆国产免费观看| 亚洲AV无码成人精品区狼人影院 | 四虎永久在线精品免费观看地址 | 亚洲AV成人片色在线观看| 毛片免费全部播放一级| 三级黄色在线免费观看|