<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);
    }

    接下來是實現類

    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開頭的都符合,括號里面的 .. 表示參數是隨意的都可以。
        
    -->
        
    <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 方法實現功能描述  
         *   
    @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就是記錄的日志,當然
    這里只是個很簡單的實現,但是很簡單的實現卻很容易說清楚原理。

    posted on 2008-11-25 18:14 老丁 閱讀(3471) 評論(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年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    留言簿(4)

    我參與的團隊

    文章分類(50)

    文章檔案(48)

    相冊

    朋友

    搜索

    •  

    積分與排名

    • 積分 - 96978
    • 排名 - 597

    最新評論

    主站蜘蛛池模板: 免费va人成视频网站全| 精品亚洲永久免费精品| 亚洲AV噜噜一区二区三区| 亚洲中文字幕丝袜制服一区| 久久精品无码精品免费专区| 在线aⅴ亚洲中文字幕| 亚洲国产一区视频| 暖暖免费日本在线中文| 亚洲欧洲专线一区| 亚洲精品无码专区久久久 | 亚洲国产精品无码久久一区二区| 午夜视频在线免费观看| 色婷婷亚洲一区二区三区| 亚洲AV无码专区亚洲AV伊甸园| 永久免费AV无码国产网站| 久久九九久精品国产免费直播| 亚洲成综合人影院在院播放| 亚洲一区二区三区国产精品| 麻豆高清免费国产一区| 一边摸一边桶一边脱免费视频| 亚洲精品成人图区| 亚洲午夜国产精品无码老牛影视| 最近中文字幕mv手机免费高清| 99在线免费观看| 色婷婷亚洲一区二区三区| 亚洲日韩在线视频| 亚洲av无码一区二区乱子伦as| 国产大片线上免费看| 精品久久久久久久久免费影院| 插鸡网站在线播放免费观看| 亚洲爆乳成av人在线视菜奈实| 亚洲视频在线免费看| 亚洲中文字幕日产乱码高清app| 成人免费无遮挡无码黄漫视频| 91视频免费网址| a毛片在线还看免费网站| 老湿机一区午夜精品免费福利| 2020久久精品亚洲热综合一本 | 色老板亚洲视频免在线观| 久久精品7亚洲午夜a| 亚洲精品岛国片在线观看|