首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

基於 Spring 構建企業級異常處理框架:統一攔截、錯誤碼映射、多模式配置

     編輯:Java 相關知識

框架設計目標

  • 完整異常體系:受檢/非受檢異常統一繼承體系
  • 統一處理:框架層攔截,業務代碼零 try-catch
  • 可配置、受管、易用:XML Schema + Annotation 雙模式,Spring 原生集成

異常體系設計

  • BaseAppException:受檢異常基類
  • BaseAppRuntimeException:非受檢異常基類
  • WrapperedAppException:包裝第三方/JDK 異常轉為受檢
  • 每個異常擁有唯一 errorCode(格式 LDD600-\d{1,5}),前端按碼顯示友好提示
  • 第三方異常必須包裝後拋出,禁止直接拋出

核心組件

ExceptionContext:全局異常元數據倉庫

  • 單例模式(CoreContextFactory)
  • 映射:Class<?> → ExceptionDefinition(含 errorCode、handler 名稱集合)
  • 支持繼承回溯:子類未註冊則遞歸查找父類配置

ExceptionHandler:異常處理器接口

public interface ExceptionHandler {
    void handle(ExceptionContext ctx, Exception ex, Request req, Response resp);
}

內置 ConsoleHandler(控制台輸出)、LogHandler(日誌記錄)等,業務可自定義實現(如郵件通知、鉤子調用)。

ActionBroker:統一入口攔截器

所有 Action/Service 執行委託給 ActionBroker,其 execute() 內部 try-catch 捕獲所有異常,委託 ExceptionContext 獲取對應 Handler 鏈執行處理,最後封裝 Response 返回前端。

雙模式配置

XML Schema 方式(Spring 2.0+)

<xsd:complexType name="exceptionType">
  <xsd:sequence>
    <xsd:element name="level" default="error" minOccurs="0">...</xsd:element>
    <xsd:element name="handler" maxOccurs="unbounded">...</xsd:element>
  </xsd:sequence>
  <xsd:attribute name="errorCode">
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:pattern value="LDD600-\d{1,5}.*"/>
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:attribute>
  <xsd:attribute name="class" type="xsd:string" use="required"/>
</xsd:complexType>

實現 NamespaceHandler + BeanDefinitionParser 解析自定義標籤,註冊為 Spring Bean。

Annotation 方式(JDK 1.5+)

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Exceptional {
    String errorCode();
    Class<? extends ExceptionHandler>[] handlers();
}

ExceptionalAnnotationBeanPostProcessor 實現 BeanPostProcessor,掃描帶 @Exceptional 的異常 Bean,啟動時自動註冊至 ExceptionContext。

測試驗證

JMock 單元測試覆蓋:

  • 受檢異常拋出 → Handler 執行、Response 錯誤碼正確
  • 運行時異常拋出 → 同樣流程
  • 第三方異常包裝拋出 → 正確映射
  • Annotation 自動註冊 → ConfigException errorCode 為 LDD600-00002

總結

框架將「異常定義、錯誤碼分配、處理器綁定」前置為配置/元數據,業務代碼專注於拋出具體異常類,實現關注點分離。雙模式配置兼顧集中管理(XML)與代碼內聚(Annotation),Spring 原生集成零侵入,適合中大型項目標準化異常治理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved