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

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

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

    laoding
    本來我以為,隱身了別人就找不到我,沒有用的,像我這樣拉風的男人,無論走到哪里,都像在黑暗中的螢火蟲一樣,那樣的鮮明,那樣的出眾。我那憂郁的眼神,稀疏的胡茬,那微微隆起的將軍肚和親切的笑容......都深深吸引了眾人......
    posts - 0,  comments - 37,  trackbacks - 0

    一直就用spring的IOC,遺憾spring的另一重要組成部分AOP卻沒用過,所以近幾天抽空研究了下AOP,學了些東西,在這里記錄下spring2.0的aop配置,以一個簡單的記錄日志的實例來說明,先介紹下用XMLSchema來配置,下一篇介紹annotation配置,廢話不多說,開始吧
    先新建個web工程,將spring的包加進去,為方便就把全部的jar包加進去。

    先來看個接口,很簡單就兩個方法

    public interface Print {
        
    public String print(String name);
        
    public String sleep(String name);
    }

    接下來是實現(xiàn)類

    public class SystemPrint implements Print{
        
        
    public String print(String name){
            String result
    ="hello " + name;
            System.out.println(result);
            
    return result;
        }
        
        
    public String sleep(String name){
            String result
    =name+" is sleep now";
            System.out.println(result);
            
    return result;
        }
    }

    下面是所要織入的代碼,也就是我們要用來記錄日志的

    public class GetLog {
        
    public void getLog(ProceedingJoinPoint joinpoint) throws Throwable {
            String reslut 
    = (String)joinpoint.proceed();
            
    //這里是記錄日志的
            System.out.println("result==="+reslut);
        }
    }

    再來看spring配置文件,沒有注釋的很清楚,可以去網上查查

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop
    ="http://www.springframework.org/schema/aop"
        xmlns:tx
    ="http://www.springframework.org/schema/tx"
        xmlns:jee
    ="http://www.springframework.org/schema/jee"
        xsi:schemaLocation
    ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd"
    >
        
        
    <!--這個bean是作為切面    -->
        
    <bean id="log" class="spring2aop.GetLog"></bean>

        
    <!--
            注意這里:expression="execution(* spring2aop.*.print*(..))" 
            括號里面第一個*號代表返回值 接下來  spring2aop.*. 是你要切入的代碼的大概路徑,這里為什么用大概路徑來形容呢
            因為這里的意思是符合以spring2aop的路徑都會作為選擇的對象,也不詳細介紹,查下就明白了, print*(..)是指
            方法名以print開頭的都符合,括號里面的 .. 表示參數(shù)是隨意的都可以。
        
    -->
        
    <aop:config>
            
    <aop:aspect ref="log">
                
    <aop:pointcut id="printMethods" expression="execution(* spring2aop.*.print*(..))"/>
                
    <aop:after-returning method="getLog" pointcut-ref="printMethods" returning="retVal"/>
            
    </aop:aspect>
        
    </aop:config>
        
        
    <aop:config>
            
    <aop:aspect ref="log">
                
    <aop:pointcut id="sleepMethods" expression="execution(* spring2aop.*.sle*(..))"/>
                
    <aop:after-returning method="getLog" pointcut-ref="sleepMethods" returning="retVal"/>
            
    </aop:aspect>
        
    </aop:config>
        
        
    <!--要織入代碼的bean-->
        
    <bean id="print" class="spring2aop.SystemPrint"></bean>

    </beans>

    測試類:
    public class Test {

        
    /**  
         *   @Description 方法實現(xiàn)功能描述  
         *   
    @param args
         *   void
         *   
    @throws  拋出異常說明
         
    */
        
    public static void main(String[] args) {
            ApplicationContext act 
    = new ClassPathXmlApplicationContext(
            
    "applicationContext20.xml");
            Print t 
    =(Print)act.getBean("print");
            t.print(
    "ding");
            System.out.println(
    "-----------------");
            t.sleep(
    "laoding");

        }


    }

    運行這個類,得到如下結果:
    hello ding
    hello ding
    result===hello ding
    -----------------
    laoding is sleep now
    laoding is sleep now
    result===laoding is sleep now

    這里的hello ding 打印了兩次,不用擔心,這是因為執(zhí)行到getLog切面類的
     String reslut = (String)joinpoint.proceed();這句代碼的時候再執(zhí)行了一次,這句代碼是取回
    返回結果的,可以設置個斷點來測試下好了這里就輸出的result就是記錄的日志,當然
    這里只是個很簡單的實現(xiàn),但是很簡單的實現(xiàn)卻很容易說清楚原理。

    posted on 2008-11-25 18:14 老丁 閱讀(3456) 評論(4)  編輯  收藏 所屬分類: spring

    FeedBack:
    # re: spring aop簡單日志實例(1)
    2009-11-07 14:16 | 真爛
    垃圾,您還是改行吧。  回復  更多評論
      
    # re: spring aop簡單日志實例(1)
    2009-11-10 16:34 | 老丁
    朋友,請自重!如果覺得爛請繞道!
      回復  更多評論
      
    # re: spring aop簡單日志實例(1)
    2009-11-12 11:53 |
    ProceedingJoinPoint 少一個類  回復  更多評論
      
    # re: spring aop簡單日志實例(1)
    2011-11-15 15:32 | codeme
    <aop:config>
    <aop:aspect ref="log">
    <aop:pointcut id="printMethods" expression="execution(* spring2aop.*.print*(..))"/>
    <aop:after-returning method="getLog" pointcut-ref="printMethods" returning="retVal"/>
    </aop:aspect>
    </aop:config>

    <aop:config>
    <aop:aspect ref="log">
    <aop:pointcut id="sleepMethods" expression="execution(* spring2aop.*.sle*(..))"/>
    <aop:after-returning method="getLog" pointcut-ref="sleepMethods" returning="retVal"/>
    </aop:aspect>
    </aop:config>
    沒有這么配置的吧,怎么不寫到一起?  回復  更多評論
      
    本博客主為學習和復習之用,無關其他,想罵人的繞道
    Email:dkm123456@126.com
    大家一起交流進步
    QQ:283582761


    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    留言簿(4)

    我參與的團隊

    文章分類(50)

    文章檔案(48)

    相冊

    朋友

    搜索

    •  

    積分與排名

    • 積分 - 96446
    • 排名 - 600

    最新評論

    主站蜘蛛池模板: 亚洲综合另类小说色区色噜噜| 四虎永久在线精品免费观看视频| 国产极品美女高潮抽搐免费网站 | 亚洲精品无码MV在线观看| 偷自拍亚洲视频在线观看99| 国产精品免费看香蕉| 国产在亚洲线视频观看| 亚洲成aⅴ人片久青草影院| ww在线观视频免费观看w| 亚洲综合无码AV一区二区| 东北美女野外bbwbbw免费| 亚洲AV无码不卡无码| 成年人网站免费视频| 亚洲日本va一区二区三区| 免费国产真实迷j在线观看| 无码人妻一区二区三区免费视频 | 亚洲阿v天堂在线2017免费| 亚洲亚洲人成综合网络| 久久精品视频免费看| 亚洲国产精品久久久久秋霞影院| 久九九精品免费视频| 国产成人精品日本亚洲语音| 亚洲人成网站18禁止一区| 一级毛片在线免费看| 欧洲 亚洲 国产图片综合| 国产jizzjizz免费看jizz| 你好老叔电影观看免费| 亚洲成人黄色网址| 免费一级毛片不卡在线播放| 国产免费播放一区二区| 亚洲美女视频网址| 国产成人免费网站在线观看| 免费人成在线观看视频高潮| 亚洲伊人久久大香线蕉结合| 亚洲国产午夜福利在线播放| 久久午夜夜伦鲁鲁片免费无码| 亚洲色偷偷综合亚洲AV伊人蜜桃| 久久久久一级精品亚洲国产成人综合AV区| 香蕉免费一区二区三区| 亚洲国产成人AV在线播放| 亚洲av日韩av不卡在线观看|