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

    }

         運(yùn)行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定義,并指定要納入其進(jìn)行異常攔截的類。

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

    FeedBack:
    # re: 用spring的AOP實(shí)現(xiàn)異常攔截 (轉(zhuǎn)) 2009-12-25 17:24 wonkzhang
    真是無巧不成雙,,樓主引用的代碼,,是我同事寫的.原來07年她在廣州...哈哈哈.現(xiàn)在在北京了  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲va中文字幕| 久久免费99精品国产自在现线 | 成年性午夜免费视频网站不卡| 午夜性色一区二区三区免费不卡视频 | 亚洲中文字幕在线第六区| 无遮挡免费一区二区三区| 国产成人青青热久免费精品| 亚洲精品伦理熟女国产一区二区| 日韩精品视频免费观看| 自拍偷自拍亚洲精品播放| 亚洲国产精品视频| 在线观看亚洲人成网站| 最近中文字幕mv免费高清在线| 亚洲色图视频在线观看| 久久久久久久免费视频| 亚洲精品色播一区二区| 亚洲av无码成人精品区在线播放| 一级毛片免费在线观看网站| 国产亚洲综合色就色| 国产成人精品免费视频动漫| 国产人成亚洲第一网站在线播放| 日韩免费视频播放| 国产vA免费精品高清在线观看| 在线观看av永久免费| 亚洲成色www久久网站夜月| 亚洲精品国产摄像头| 不卡精品国产_亚洲人成在线 | 午夜亚洲www湿好大| 国产亚洲女在线线精品| 青娱乐免费在线视频| 久久水蜜桃亚洲AV无码精品| 精品国产亚洲一区二区在线观看| 一区二区免费视频| 亚洲国产精品成人精品无码区| 3344永久在线观看视频免费首页 | 成人黄动漫画免费网站视频| 一级特黄录像视频免费| 亚洲美女人黄网成人女| 免费在线观看黄网| 亚洲免费视频网址| 永久免费精品影视网站|