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

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

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

    隨筆 - 4  文章 - 10  trackbacks - 0
    <2009年12月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    Spring支持四種攔截類型:目標方法調(diào)用前(before),目標方法調(diào)用后(after),目標方法調(diào)用前后(around),以及目標方法拋出異常(throw)。
             最近用到spring的AOP來實現(xiàn)異常攔截,用到了spring的ThrowsAdvice。ThrowsAdvice是一個標示接口,我們可以在類中定義一個或多個,來捕獲定義異常通知的bean拋出的異常,并在拋出異常前執(zhí)行相應的方法。
            我想大家可能都在項目中有過這樣的需求,想在某種異常拋出時進行一些記錄操作,例如記錄錯誤日志到數(shù)據(jù)庫或日志文件中,但把這些代碼分布到項目各處不但難于管理,并且代碼量巨大,用Spring的AOP來實現(xiàn)攔截不失為一個比較好的方法。
            下面,讓我們來感受一下它的魅力吧。
     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!");
        }


        
    /**
         * 將字符串轉(zhuǎn)換為整數(shù).
         * 
    @param number 需轉(zhuǎn)換的字符串
         * 
    @return 轉(zhuǎn)換成的字符串
         * 
    @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為空或非數(shù)字時,將拋出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類后,結(jié)果如下:
         ************************************
         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 冬天出走的豬 閱讀(396) 評論(1)  編輯  收藏 所屬分類: spring

    FeedBack:
    # re: 用spring的AOP實現(xiàn)異常攔截 (轉(zhuǎn)) 2009-12-25 17:24 wonkzhang
    真是無巧不成雙,,樓主引用的代碼,,是我同事寫的.原來07年她在廣州...哈哈哈.現(xiàn)在在北京了  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品乱码久久久久久蜜桃不卡| 亚洲中文字幕精品久久| 国产精品高清视亚洲精品| 一级特黄a大片免费| 国产福利在线免费| 国产国拍亚洲精品mv在线观看| 美女被免费网站在线视频免费| 无码日韩人妻av一区免费| 美女视频黄a视频全免费网站色| 亚洲AV无码不卡无码| a毛看片免费观看视频| 亚洲成A人片77777国产| 亚洲av永久中文无码精品综合 | 一级毛片免费一级直接观看| 西西人体44rt高清亚洲 | 91精品全国免费观看含羞草| 国产综合精品久久亚洲| 亚洲精品永久www忘忧草| 成人无码a级毛片免费| 狠狠色伊人亚洲综合成人| 成年女人喷潮毛片免费播放| 亚洲三级在线视频| 成年人免费视频观看| 国产午夜不卡AV免费| 理论亚洲区美一区二区三区| 亚洲成片观看四虎永久| 亚洲精品国产免费| 久久精品国产亚洲AV蜜臀色欲 | 亚洲成A人片77777国产| 成年在线观看网站免费| 成在人线av无码免费高潮喷水 | 大地影院MV在线观看视频免费| 国产精品亚洲一区二区三区在线观看 | 一本岛v免费不卡一二三区| 丁香婷婷亚洲六月综合色| 国产l精品国产亚洲区在线观看| 国产一区二区三区在线免费观看 | 亚洲精品国偷自产在线| 四虎成人精品在永久免费| 青苹果乐园免费高清在线| 亚洲AV综合色区无码一二三区 |