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

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


    網站導航:
     
    主站蜘蛛池模板: 免费观看91视频| 美女扒开尿口给男人爽免费视频| 72pao国产成视频永久免费| 哒哒哒免费视频观看在线www| 亚洲一区二区三区免费视频| 免费三级毛片电影片| 亚洲不卡视频在线观看| 一个人免费高清在线观看| 亚洲日本一线产区和二线产区对比| 成熟女人牲交片免费观看视频| 亚洲人成www在线播放| 国产精品酒店视频免费看| 最新亚洲人成无码网www电影| avtt亚洲天堂| 可以免费观看的毛片| 亚洲日韩国产精品无码av| 一个人看www在线高清免费看| 亚洲AV无码一区二区三区网址| 四虎免费永久在线播放| 视频免费在线观看| 亚洲午夜国产精品无卡| 国产亚洲福利一区二区免费看| 国产福利在线观看永久免费| 久久久久亚洲av无码尤物| 黄+色+性+人免费| 99亚洲男女激情在线观看| 亚洲码国产精品高潮在线| 最近2022中文字幕免费视频| 亚洲精品中文字幕无码A片老| 亚洲AV中文无码乱人伦在线视色| 免费毛片在线看不用播放器| 亚洲综合久久1区2区3区| 日韩高清在线免费看| 二区久久国产乱子伦免费精品| 中文字幕亚洲综合久久| 国产无遮挡又黄又爽免费视频 | 亚洲春色在线视频| 成人免费大片免费观看网站| 无忧传媒视频免费观看入口| 亚洲精品综合一二三区在线| 日韩成人免费在线|