1. 程式人生 > >Castle AOP攔截與異常處理

Castle AOP攔截與異常處理

實現AOP攔截

如上所述,Tiny Library CQRS利用了Apworks框架實現AOP攔截,那麼首先來了解一下Apworks支援AOP攔截的方式。Apworks採用Castle DynamicProxy實現AOP攔截,因此針對AOP攔截部分的開發,我們需要藉助Castle DynamicProxy框架。在此說明一下,雖然Apworks極力使用(,PoEAA)來降低核心模組對第三方元件的耦合度(這部分內容我會在《》系列文章中介紹),但與倉儲、訊息匯流排的實現相比,AOP更為核心,因此Apworks框架的核心模組直接依賴於Castle DynamicProxy。要基於Apworks實現AOP攔截,可以參考並遵循以下幾個步驟:

定義攔截器(Interceptor)

首先在你的專案中定義一個攔截器(Interceptor),使其實現Castle.DynamicProxy.IInterceptor介面,該介面位於Castle.Core.dll程式集中,是與Apworks一起釋出的。該介面只需要實現Intercept方法即可,在此方法中執行你自己的邏輯,然後使用invocation.Proceed方法將呼叫傳遞下去。需要注意的是,當invocation.Proceed發生異常的時候,如果被攔截的方法有返回值,那麼你需要捕獲異常並同時設定invocation.ReturnValue屬性,否則會從Castle.DynamicProxy

中丟擲新的異常,而覆蓋掉原始的異常資訊。程式碼大致如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class MyInterceptor : IInterceptor { #region IInterceptor Members public void Intercept(IInvocation invocation) { try { invocation.Proceed();
} catch (Exception ex) { invocation.ReturnValue = xxx; // Required!! } } #endregion }

Apworks框架在其Apworks.Interception名稱空間下提供了一個用於異常處理的內建攔截器,在後面我會介紹這個攔截器。

配置Apworks框架

為了使用自定義的攔截器,我們需要配置Apworks框架,具體表現就是在web.config或者app.config配置檔案中的apworks節點下,設定與AOP攔截相關的資訊。這些資訊包括:需要為哪些型別的哪些方法呼叫啟用AOP攔截?採用什麼攔截器去處理這些被攔截的方法?每個方法又支援哪些攔截器?比如,在Tiny Library CQRS中,AOP攔截的配置資訊如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

相關推薦

Castle AOP攔截異常處理

實現AOP攔截 如上所述,Tiny Library CQRS利用了Apworks框架實現AOP攔截,那麼首先來了解一下Apworks支援AOP攔截的方式。Apworks採用Castle DynamicProxy實現AOP攔截,因此針對AOP攔截部分的開發,我們需

SpringMVC攔截異常處理(六)

在我們SpringMVC中也可以使用攔截器對使用者的請求進行攔截,使用者可以自定義攔截器來實現特定的功能。自定義攔截器必須要實現HandlerInterceptor介面 package com.spring.mvc.interceptor; import javax.servlet.htt

Jersey學習記錄(三)--過濾攔截異常處理

本文記錄全域性異常返回,過濾器,攔截器. 一.全域性異常處理器 webservice定義全域性返回錯誤碼是很重要的一個功能,jersey正好就能實現這一功能. 整個流程就是當jersey託管的類發現了異常,丟擲給jersey的異常處理器,該異常處理器直

PHP之 錯誤 異常處理

函數 用戶 exceptio 產生 存放位置 如果 date error_log reporting PHP的錯誤報告有三種: 1.錯誤,語法解析錯誤,致命錯誤2.警告3.註意 錯誤 -> 致命錯誤,會終止已下程序的執行,語法錯誤的話,PHP壓根就沒執行警告 ->

js中eval,arguments異常處理的用法-基礎知識總結------彭記(017)

報錯 字符串 nts 字符 number 拖動 ron cnblogs 數組 eval的使用: <script> /*eval的作用: * 1.將字符串當成js代碼來執行 * 2.可以將json格式的字符串轉換為js對象*/

PL/SQL輕量版(三)——遊標異常處理

多個 次循環 指向 count dbms 都是 不能 weight acl 一、遊標   1.概念     遊標是一個 指向上下文的句柄( handle) 或指針。通過遊標,PL/SQL 可以控制上下文區和處理語句時上下文區會發生些什麽事情。   2.遊標處理   

python:包異常處理

word 要求 所有 expect return interrupt itl 標識 toolbar 一、包 1,什麽是包? 把解決一類問題的模塊放在同一個文件夾裏-----包 2,包是一種通過使用‘.模塊名’來組織python模塊名稱空間的方式。   1. 無論是impo

【軟件構造】第七章第二節 錯誤異常處理

throw 之間 IE 程序猿 數組越界 它的 extends 希望 nds 第七章第二節 錯誤與異常處理 本節關註:Java中錯誤和異常處理的典 型技術——把原理落實到代碼上! Outline: Java中的錯誤和異常(java.lang.throwable) 異常

面向對象中關於元類的介紹異常處理

xxx 使用 元類 sin cor 發生 each people 信息 一、異常處理 1. 什麽是異常處理 異常是錯誤發生的信號,一旦程序出錯就會產生一個異常,如果該異常 沒有被應用程序處理,那麽該異常就會拋出來,程序的執行也隨之終止 異常包含三個部

python 約束異常處理

一、類的約束   1、約束就是對類的約束。其實就是父類對子類進行約束,子類必須要寫xxx方法。   2、抽象:就是當我們沒法對一個功能或者一個屬性進行精確的表述,一般都採用抽象的方式給出。     (1)抽象類的書寫規範 from abc import ABCMeta,abstractmetho

Promise專案實踐異常處理方式

Promise是解決回撥地獄的好工具,比起直接使用回撥函式promise的語法結構更加清晰,程式碼的可讀性大大增加。但是想要在真是的專案中恰當的運用promise可不是隨便寫個Demo這個簡單的,如果運用不當反而會增加程式碼的複雜性。 1. 使用Promise經常遇到的問題 1.

PHP 錯誤異常處理(一)

PHP 錯誤與異常處理(一) 異常與錯誤 PHP中的錯誤: php中大部分情況是由錯誤的語法,伺服器環境導致,使得編譯器無法通過檢查,甚至無法執行的情況。warning、notice都是錯誤,只是他們的級別不同而已,並且錯誤是不能被try-catch捕獲的。 PHP中的異常: 程式

我的第一個python web開發框架(40)——後臺日誌異常處理

1 #!/usr/bin/env python 2 # coding=utf-8 3 4 from bottle import put 5 from common import web_helper, encrypt_helper, security_helper 6

C++的型別轉換異常處理

一 名稱和語法 1 C語言風格:不管什麼型別的轉換統統是: TYPE b = (TYPE)a; 2 C++風格: 1)static_cast,靜態型別轉換。如int轉換成char 2)reinterpreter_cast,重新解釋型別 3) dynamic_cast,命名上理解是

Flask------訊息提示異常處理

“”" 目標: 如何給html頁面傳遞變數? render_templates(“xxx.html”, message =“xxxxx”, code=“xxx”) 如何顯示給html傳遞的變數? {{ message }} # 404異常處理函式;@app.er

使用aop實現全域性異常處理

日常業務中存在的問題 使用大量的try/catch來捕獲異常 導致整個控制層程式碼可讀性極差,並且此類工

python-檔案I/O異常處理

open函式 Python內建的open()函式開啟一個檔案,建立一個file物件,相關的輔助方法才可以呼叫它進行讀寫。語法為: file object = open(file_name [, access_mode][, buffering]) 各個引數的細節如下: 1、file_name

PHP錯誤異常處理(一)

語法 數據 war 錯誤處理 級別 過程 應該 要求 文件 在項目開發過程中,無論你多麽仔細,都會遇到這樣或那樣的報錯,這就要求我們有個很好的處理。錯誤處理的目標:1、提升用戶體驗。2、防止數據的丟失或者程序崩潰。 php錯誤分為以下幾類1、錯誤(語法錯誤,程序直接不執行;

COM元件設計應用(十二)——錯誤異常處理

一、前言   程式設計中,錯誤處理必不可少,而且通常要佔用很大的篇幅。本回書著落在 COM 中的錯誤(異常)的處理方法。   在元件程式中,如果遇到錯誤,一般有兩個方式進行處理。   二、簡單返回   對於比較簡單的錯誤,直接返回表示錯誤原因的 HRESULT。比如下面幾個

springcloud系列—Hystrix—第3章-3: Hystrix 服務降級(fallback)異常處理,Hystrix依賴隔離(命令名稱-分組和執行緒池)、請求快取清除快取、斷路器

資料參考:《Spring Cloud 微服務實戰》 目錄 服務降級 在HystrixCommand中可以通過過載getFallback()方法來實現服務降級邏輯。 在 HystrixObservableCommand 實現得 Hystrix 命令中,我們可以通過過載 resumenW