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

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

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

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

    一直就用spring的IOC,遺憾spring的另一重要組成部分AOP卻沒用過,所以近幾天抽空研究了下AOP,學(xué)了些東西,在這里記錄下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配置文件,沒有注釋的很清楚,可以去網(wǎng)上查查

    <?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");

        }


    }

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

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

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

    FeedBack:
    # re: spring aop簡單日志實例(1)
    2009-11-07 14:16 | 真爛
    垃圾,您還是改行吧。  回復(fù)  更多評論
      
    # re: spring aop簡單日志實例(1)
    2009-11-10 16:34 | 老丁
    朋友,請自重!如果覺得爛請繞道!
      回復(fù)  更多評論
      
    # re: spring aop簡單日志實例(1)
    2009-11-12 11:53 |
    ProceedingJoinPoint 少一個類  回復(fù)  更多評論
      
    # 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>
    沒有這么配置的吧,怎么不寫到一起?  回復(fù)  更多評論
      
    本博客主為學(xué)習(xí)和復(fù)習(xí)之用,無關(guān)其他,想罵人的繞道
    Email:dkm123456@126.com
    大家一起交流進步
    QQ:283582761


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

    留言簿(4)

    我參與的團隊

    文章分類(50)

    文章檔案(48)

    相冊

    朋友

    搜索

    •  

    積分與排名

    • 積分 - 96431
    • 排名 - 600

    最新評論

    主站蜘蛛池模板: 国产色在线|亚洲| 国产亚洲sss在线播放| 人人鲁免费播放视频人人香蕉| 人妻视频一区二区三区免费| 亚洲精品视频久久| 99在线视频免费| 99久久精品国产亚洲| 久久ww精品w免费人成| 亚洲欧洲日韩国产| A在线观看免费网站大全| 亚洲综合欧美色五月俺也去| 无码免费午夜福利片在线| 国产亚洲精品成人AA片| 国产成人在线观看免费网站 | 亚洲在成人网在线看| 久爱免费观看在线网站| 亚洲欧洲一区二区| 97av免费视频| 亚洲jjzzjjzz在线观看| 日韩精品免费一区二区三区| 日本激情猛烈在线看免费观看| 久久精品国产亚洲7777| 99视频在线免费看| 中文字幕亚洲男人的天堂网络| 午夜成人免费视频| 一级毛片免费不卡直观看| 亚洲va无码手机在线电影| 天天影院成人免费观看| 亚洲精品美女网站| 亚洲男人第一无码aⅴ网站 | 四虎影视在线看免费观看| 亚洲色爱图小说专区| 国产在线观看免费观看不卡| 朝桐光亚洲专区在线中文字幕| 国产亚洲美日韩AV中文字幕无码成人 | 亚洲AV无码一区二区三区国产| 本免费AV无码专区一区| 亚洲另类精品xxxx人妖| 午夜亚洲国产成人不卡在线| 嫩草成人永久免费观看| 久久水蜜桃亚洲AV无码精品|