<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 冬天出走的豬 閱讀(397) 評論(1)  編輯  收藏 所屬分類: spring

    FeedBack:
    # re: 用spring的AOP實現異常攔截 (轉) 2009-12-25 17:24 wonkzhang
    真是無巧不成雙,,樓主引用的代碼,,是我同事寫的.原來07年她在廣州...哈哈哈.現在在北京了  回復  更多評論
      
    主站蜘蛛池模板: 亚洲精品狼友在线播放| 精品国产亚洲男女在线线电影 | 日美韩电影免费看| 2020天堂在线亚洲精品专区| 黄在线观看www免费看| 亚洲影视一区二区| 一个人免费观看在线视频www| 亚洲人成网址在线观看| 222www免费视频| 亚洲av无码一区二区三区观看| 久久不见久久见免费影院| 亚洲中文字幕无码av永久| 日本高清免费不卡在线| 精品久久久久久久久亚洲偷窥女厕| 国产伦精品一区二区三区免费迷| 高潮内射免费看片| 久久91亚洲人成电影网站| 精品国产一区二区三区免费| 亚洲美女中文字幕| 日本阿v免费费视频完整版| 亚洲色大成WWW亚洲女子| 亚洲AV网站在线观看| baoyu122.永久免费视频| 自怕偷自怕亚洲精品| 成人免费无码大片A毛片抽搐色欲| 亚洲av永久无码精品网址| 亚洲国产一级在线观看| 日韩电影免费观看| 中日韩亚洲人成无码网站| 亚洲国产精品VA在线看黑人| 国产免费的野战视频| 亚洲AV无码一区二区三区电影 | 久久亚洲精品中文字幕三区| 免费在线观看一区| 国产嫩草影院精品免费网址| 亚洲精品国产日韩无码AV永久免费网| 亚洲av无码成h人动漫无遮挡| 黄页网站免费在线观看| 免费人成大片在线观看播放电影| 国产成人无码综合亚洲日韩| 一本岛高清v不卡免费一三区|