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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲六月丁香六月婷婷色伊人| 奇米影视亚洲春色| 亚洲精品视频免费在线观看| 69成人免费视频无码专区| 亚洲成av人片不卡无码久久| 久久精品国产亚洲AV未满十八| 日本免费一区二区久久人人澡| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲精品国产摄像头| 久久精品视频免费看| 亚洲高清在线观看| 亚洲av无码专区亚洲av不卡| 日韩免费无砖专区2020狼| 亚洲精品福利网站| 国产永久免费高清在线| 午夜老司机免费视频| 国产亚洲精品美女| 亚洲小说区图片区另类春色| 日日摸日日碰夜夜爽亚洲| 亚洲国产综合无码一区二区二三区| www成人免费视频| 亚洲免费在线视频| 无限动漫网在线观看免费| 怡红院亚洲红怡院在线观看| 亚洲色婷婷综合开心网| 老司机午夜在线视频免费观| 毛片免费全部免费观看| 亚洲国产品综合人成综合网站| 97人伦色伦成人免费视频| h片在线观看免费| 无码专区一va亚洲v专区在线| 国产免费牲交视频免费播放| 亚洲免费日韩无码系列| 99国产精品免费观看视频| 亚洲国产精品婷婷久久| 日本一区二区三区免费高清| 丰满少妇作爱视频免费观看| 亚洲黄色在线观看视频| 亚洲免费网站在线观看| 羞羞视频网站免费入口| 亚洲视频免费在线观看|