成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring AOP學習筆記

開發 后端
本文將詳細介紹如何通過Spring.AOP特性實現異常的統一處理,以及其中中括號括起來的前三個參數是可選的,返回值可以是任意數據類型。

通常我們對于異常的處理方式都是大同小異的,要么直接捕獲并處理,要么讓它拋向上一層,要么就是記錄到日志里,或者發郵件提供管理員,但這樣下來一個項目中便會到處充斥著 try/catch ,并且 catch 中的代碼基本類似,于是我們聞到的其中難聞的壞味道。

本文將介紹如何通過 Spring.AOP 特性實現異常的統一處理,如果我們需要在異常發生時做一些操作的話我們就必須實現 Spring.Aop.IThrowsAdvice,該接口沒有任何實現方法,是一個空接口,它僅僅做為一個標記接口而存在,但實現了 IThrowsAdvice 接口的類必須定義至少一個 AfterThrowing 方法,方法的簽名如下:AfterThrowing([MethodInfo method, Object[] args, Object target], Exception subclass);

其中中括號括起來的前三個參數是可選的,返回值可以是任意數據類型。 Spring.Aop.Framework.Adapter.ThrowsAdviceInterceptor 類實現對實現了 Spring.Aop.IThrowsAdvice 派生類中的方法依賴注入,其中的 ThrowsAdviceInterceptor() 方法檢查 Spring.Aop.IThrowsAdvice 的派生類是否定義了至少一個異常處理方法,如果沒有則拋出 ArgumentException 異常,MapAllExceptionHandlingMethods()方法則在定義好的重載方法中查找出異常類型與最后一個參數所定義的類型中最接近的方法,而且我們不應該在其中實現了兩個相同異常類型的方法,即使他們的參數數目不同,否則也將拋出 ArgumentException 異常。

[下面引用自《Spring 技術手冊》第4章 P94 頁中的一段話]注意到當異常發生時, Throw Advice 的任務只是執行對應的方法,您并不能在 Throw Advice 中將異常處理掉,在 Throw Advice 執行完畢后,原告的異常仍將傳播至應用程序之中, Throw Advice 并不介入應用程序的異常處理,異常處理仍舊是應用程序本身所要負責的,如果想要在 Throw Advice 處理時中止應用程序的處理流程,作法是拋出其它的異常。

接下來看個 Throws Advice 的實際例子,首先定義 IHello 接口:

  1. using System;  
  2.     namespace TestThrowAdvice  
  3.     {  
  4.         public interface IHello  
  5.         {  
  6.             void Hello(string name);  
  7.         }  
  8.     } 

接著定義一個 HelloSpeaker 類來實現 IHello 接口,并在 Hello() 方法中模擬程序發生錯誤時的異常拋出:

  1. using System;  
  2.     namespace TestThrowAdvice  
  3.     {  
  4.         public class HelloSpeaker : IHello  
  5.         {  
  6.             public void Hello(string name)  
  7.             {  
  8.                 Console.WriteLine("Hello, " + name);  
  9.                 //抱歉! 程序錯誤! 發生異常 XD  
  10.                 throw new Exception("發生異常");  
  11.             }  
  12.         }  
  13.     } 

如果您需要在應用程序拋出異常時,介入 Throw Advice 提供一些服務,例如記錄一些異常信息,則可以實現 Spring.Aop.IThrowsAdvice 接口,在這個例子中我使用了 log4net 組件來實現日志的記錄:

  1. using System;  
  2. using Spring.Aop;  
  3. using log4net;  
  4. using log4net.Core;  
  5. using System.Reflection;  
  6. [assembly: log4net.Config.XmlConfigurator(Watch = true)]  
  7. namespace TestThrowAdvice  
  8. {  
  9.    public class SomeThrowAdvice : IThrowsAdvice  
  10.   {  
  11.       private ILog logger;  
  12.       public SomeThrowAdvice()  
  13.       {  
  14.          logger = LogManager.GetLogger(this.GetType());  
  15.       }  
  16.       public void AfterThrowing(MethodInfo method, Object[] args, Object target, Exception exception)  
  17.       {  
  18.          // 記錄異常  
  19.         logger.Info("記錄異常", exception);  
  20.       }  
  21.    }  
  22.  } 

接著在配置文件(我這里使用了獨立配置文件)中寫下以下的定義,讓 Throw Advice 在異常發生時提供記錄服務:

  1. xml version="1.0" encoding="utf-8"?> 
  2.     <objects xmlns="http://www.Springframework.net" xmlns:xsi=                                      "http://www.w3.org/2001/XMLSchema-instance" 
  3.              xsi:schemaLocation="http://www.Springframework.net  
  4.              http://www.Springframework.net/xsd/Spring-objects.xsd"> 
  5.       <object id="SomeThrowAdvice" type="TestThrowAdvice.                              SomeThrowAdvice, TestThrowAdvice" /> 
  6.       <object id="HelloSpeaker" type="TestThrowAdvice.HelloSpeaker,                                                    TestThrowAdvice" /> 
  7.       <object id="HelloProxy" type="Spring.Aop.Framework.                                                 ProxyFactoryObject, Spring.Aop" > 
  8.         <property name="ProxyInterfaces"> 
  9.           <list> 
  10.             <value>TestThrowAdvice.IHello,TestThrowAdvicevalue> 
  11.           list> 
  12.         property> 
  13.         <property name="Target"> 
  14.           <ref object="HelloSpeaker" /> 
  15.         property> 
  16.         <property name="InterceptorNames"> 
  17.           <list> 
  18.             <value>SomeThrowAdvicevalue> 
  19.           list> 
  20.         property> 
  21.       object> 
  22.     objects> 

最后剩下我們的程序入口 Main() 函數了:

  1. using System;  
  2. using Spring.Context;  
  3. using Spring.Context.Support;  
  4.     namespace TestThrowAdvice  
  5.     {  
  6.         public class Program  
  7.         {  
  8.             static void Main(string[] args)  
  9.             {  
  10.                 log4net.Config.XmlConfigurator.Configure();  
  11.                 IApplicationContext context = new XmlApplicationContext(@"../../SpringNet.xml");  
  12.                 IHello helloProxy = (IHello)context.GetObject("HelloProxy");  
  13.                 try  
  14.                 {  
  15.                     helloProxy.Hello("Justin");  
  16.                 }  
  17.                 catch (Exception ex)  
  18.                 {  
  19.                     // 應用程序的異常處理  
  20.                     Console.WriteLine(ex.Message);  
  21.                 }  
  22.             }  
  23.         }  
  24.     } 

【編輯推薦】

  1. Spring控制反轉(IoC)容器
  2. Spring is coming
  3. 在Spring中進行集成測試
  4. Spring中的TopLink ServerSession
  5. Spring聲明式事務
責任編輯:佚名 來源: 中國IT實驗室
相關推薦

2009-06-19 18:38:01

Spring

2009-06-19 13:28:30

Spring AOPSpring 2.0

2022-06-07 07:58:45

SpringSpring AOP

2022-02-17 13:39:09

AOP接口方式

2017-03-29 09:08:25

Spring筆記

2022-06-08 08:04:28

Springservicerepository

2009-06-19 11:09:27

Spring AOP

2009-09-29 10:00:40

Spring AOP框

2023-03-29 08:24:30

2024-12-24 14:01:10

2021-03-01 23:26:41

日志Spring BootAOP

2024-11-04 16:29:19

2012-08-22 10:18:03

PHP

2012-09-28 10:20:14

IBMdw

2024-09-26 14:48:35

SpringAOP范式

2021-05-06 07:58:57

Spring BeanIOCAOP

2022-02-16 13:46:40

Spring Aop代碼注解

2009-06-18 14:54:52

Spring AOP

2019-11-29 16:21:22

Spring框架集成

2012-09-27 09:47:43

SpringJava面向對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清在线视频 | 狠狠操狠狠干 | 国产精品成人品 | 羞羞视频网站在线观看 | 自拍偷拍视频网 | 欧美一区成人 | 日韩欧美在线观看视频 | 日韩三级 | 国产超碰人人爽人人做人人爱 | 一区二区久久 | 欧美一级免费看 | 在线精品一区二区三区 | 中文字幕欧美一区二区 | 欧美成人精品在线观看 | 午夜免费精品视频 | 久久久久久一区 | 精国产品一区二区三区 | 中文字幕日韩欧美一区二区三区 | 国产一区二区三区在线看 | 婷婷久久精品一区二区 | www.久久99| 久久精品二区 | 欧美高清性xxxxhdvideosex | 久久久久久久久久久久久9999 | 欧美一区二区三区久久精品 | 羞羞视频网站 | 日本电影一区二区 | 国产在线对白 | 免费看国产一级特黄aaaa大片 | 色资源在线视频 | 精品三区 | 国产精品一区二区三区在线播放 | 午夜精品一区二区三区在线观看 | 在线看亚洲| 亚洲三区在线观看 | 毛片视频观看 | 剑来高清在线观看 | 天堂中文av| 久久久久无码国产精品一区 | 久久久久国产一区二区三区 | 成人深夜小视频 |