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

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

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

    隨筆 - 4  文章 - 10  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    Spring支持四種攔截類型:目標方法調用前(before),目標方法調用后(after),目標方法調用前后(around),以及目標方法拋出異常(throw)。
             最近用到spring的AOP來實現異常攔截,用到了spring的ThrowsAdvice。ThrowsAdvice是一個標示接口,我們可以在類中定義一個或多個,來捕獲定義異常通知的bean拋出的異常,并在拋出異常前執行相應的方法。
            我想大家可能都在項目中有過這樣的需求,想在某種異常拋出時進行一些記錄操作,例如記錄錯誤日志到數據庫或日志文件中,但把這些代碼分布到項目各處不但難于管理,并且代碼量巨大,用Spring的AOP來實現攔截不失為一個比較好的方法。
            下面,讓我們來感受一下它的魅力吧。
     1. 操作類TestBean
    /**
     * Copyright 2007 GuangZhou Cotel Co. Ltd.
     * All right reserved.    
     * 測試異常攔截的bean     
     * 
    @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
     * 
    @version 1.0 
     * Creation date: 2007-7-24 - 下午08:00:37
     
    */

    public class TestBean {
        
    public void method1() throws Exception {
            
    throw new Exception("Exception happened!");
        }


        
    /**
         * 將字符串轉換為整數.
         * 
    @param number 需轉換的字符串
         * 
    @return 轉換成的字符串
         * 
    @throws NumberFormatException
         * 
    @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
         * Creation date: 2007-7-24 - 下午08:05:41
         
    */

        
    public int changeToNumber(String number) throws NumberFormatException {
            
    //當number為空或非數字時,將拋出NumberFormatException
            int num = Integer.parseInt(number);
            
    return num;
        }

    }



    2. 錯誤日志攔截類ExceptionAdvisor


    import org.springframework.aop.ThrowsAdvice;
    import org.springframework.aop.framework.ProxyFactory;

    import java.lang.reflect.Method;

    /**
     * Copyright 2007 GuangZhou Cotel Co. Ltd.
     * All right reserved.    
     * 異常攔截類.      
     * 
    @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
     * 
    @version 1.0 
     * Creation date: 2007-7-24 - 下午08:12:25
     
    */

    public class ExceptionAdvisor implements ThrowsAdvice {
        
    public static void main(String[] args) {
            TestBean bean 
    = new TestBean();
            ProxyFactory pf 
    = new ProxyFactory();
            pf.setTarget(bean);
            pf.addAdvice(
    new ExceptionAdvisor());

            TestBean proxy 
    = (TestBean) pf.getProxy();
            
    try {
                proxy.method1();
            }
     catch (Exception ignore) {
            }

            
            
    try {
                proxy.changeToNumber(
    "amigo");
            }
     catch (Exception ignore) {
            }

        }


        
    /**
         * 對未知異常的處理.
         * 
    @param method
         * 
    @param args
         * 
    @param target
         * 
    @param ex
         * 
    @throws Throwable
         * 
    @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
         * Creation date: 2007-7-24 - 下午03:35:02
         
    */

        
    public void afterThrowing(Method method, Object[] args, Object target,
                Exception ex) 
    throws Throwable {
            System.out.println(
    "*************************************");
            System.out.println(
    "Error happened in class: " + target.getClass().getName());
            System.out.println(
    "Error happened in method: " + method.getName());
            
            
    for (int i = 0; i < args.length; i++{
                System.out.println(
    "arg[" + i + "]: " + args[i]);
            }

            
            System.out.println(
    "Exception class: " + ex.getClass().getName());
            System.out.println(
    "*************************************");
        }

        
        
    /**
         * 對NullPointerException異常的處理
         * 
    @param method
         * 
    @param args
         * 
    @param target
         * 
    @param ex
         * 
    @throws Throwable
         * 
    @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
         * Creation date: 2007-7-24 - 下午01:17:35
         
    */

        
    public void afterThrowing(Method method, Object[] args, Object target,
                NullPointerException ex) 
    throws Throwable {
            System.out.println(
    "*************************************");
            System.out.println(
    "Error happened in class: " + target.getClass().getName());
            System.out.println(
    "Error happened in method: " + method.getName());
            
            
    for (int i = 0; i < args.length; i++{
                System.out.println(
    "args[" + i + "]: " + args[i]);
            }

            
            System.out.println(
    "Exception class: " + ex.getClass().getName());
            System.out.println(
    "*************************************");
        }

    }

         運行ExceptionAdvisor類后,結果如下:
         ************************************
         Error happened in class: TestBean
         Error happened in method: method1
         Exception class: java.lang.Exception
        *************************************
        *************************************
        Error happened in class: TestBean
        Error happened in method: changeToNumber
        arg[0]: amigo
        Exception class: java.lang.NumberFormatException
        *************************************

        在工程中,可將ExceptionAdvisor類作為bean定義,并指定要納入其進行異常攔截的類。

    posted on 2007-08-13 16:03 冬天出走的豬 閱讀(398) 評論(1)  編輯  收藏 所屬分類: spring

    FeedBack:
    # re: 用spring的AOP實現異常攔截 (轉) 2009-12-25 17:24 wonkzhang
    真是無巧不成雙,,樓主引用的代碼,,是我同事寫的.原來07年她在廣州...哈哈哈.現在在北京了  回復  更多評論
      
    主站蜘蛛池模板: 亚洲天堂视频在线观看| 亚洲人成网站在线播放2019| 中国人xxxxx69免费视频| 久久亚洲最大成人网4438| 性做久久久久免费观看| 中文字幕免费观看全部电影| 久久亚洲国产精品成人AV秋霞| 日本人护士免费xxxx视频| 国产在线精品一区免费香蕉| 亚洲一本之道高清乱码| 亚洲性在线看高清h片| 少妇太爽了在线观看免费视频| 亚洲真人无码永久在线观看| 亚洲一区爱区精品无码| 一二三四在线播放免费观看中文版视频| 含羞草国产亚洲精品岁国产精品 | 成人自慰女黄网站免费大全| 亚洲无砖砖区免费| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲AV无码资源在线观看| 亚洲国产精品一区| 午夜毛片不卡高清免费| 国内精品一级毛片免费看| 美国毛片亚洲社区在线观看 | 一级毛片免费不卡直观看| 亚洲冬月枫中文字幕在线看| 亚洲色偷偷狠狠综合网| 久久久久国色AV免费观看性色| baoyu777永久免费视频| 美女被爆羞羞网站免费| 激情综合亚洲色婷婷五月APP| 亚洲日韩小电影在线观看| 国产男女猛烈无遮挡免费视频网站 | 亚洲中文字幕无码中文| 亚洲一区二区三区日本久久九| 国产男女猛烈无遮挡免费视频网站| 免费专区丝袜脚调教视频| 国产情侣久久久久aⅴ免费| 老妇激情毛片免费| 亚洲精品国产高清在线观看| 亚洲欧洲精品在线|