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

Java EE 6 核心特性:Bean Validation 規範接口與擴展實現深度解析(第 4 部分)

     編輯:J2EE

Bean Validation 規範接口及其可擴展實現

前文已覆蓋約束註解定義與基本驗證用法。本章深入剖析規範定義的四大類擴展接口,並以參考實現 Hibernate Validator 4.0 為例,闡述 SPI 架構與客製化擴展路徑。

1. Bootstrapping 引導接口族:構建 ValidatorFactory 的鑰匙

五大核心接口協同完成 Provider 發現、配置收集、工廠構建:

接口職責
javax.validation.ValidationAPI 入口,啟動環境中 ValidationProvider 具體實現,產生 Configuration 實例。
ValidationProviderResolver掃描類路徑下 META-INF/services/javax.validation.spi.ValidationProvider,返回所有 Provider 列表。規範提供預設實現。
javax.validation.spi.ValidationProvider具體 Provider(如 Hibernate Validator)必須實現,負責生成 Configuration 實現。
javax.validation.Configuration收集上下文配置,委派給 ValidatorFactory。
javax.validation.ValidatorFactory從 Provider 構建 Validator 實例,驗證客戶端的核心入口。

2. Validator 核心驗證接口

定義三種驗證進入點:

方法用途
validate(T object, Class... groups)驗證整個物件圖
validateProperty(T object, String propertyName, Class... groups)驗證單一屬性/欄位
validateValue(Class<T> beanType, String propertyName, Object value, Class... groups)驗證指定屬性的特定值(無需物件實例)

3. 實例化範例:預設與指定 Provider 兩種模式

// 預設模式:類路徑單一 Provider 時
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
Validator validator = vf.getValidator();

// 顯式指定 Hibernate Validator
Configuration<HibernateValidatorConfiguration> config =
    Validation.byProvider(HibernateValidator.class).configure();
ValidatorFactory vf = config.buildValidatorFactory();
Validator validator = vf.getValidator();

// 自定義 Provider 解析規則
Configuration<?> config = Validation.byDefaultProvider()
    .providerResolver(new MyValidationProviderResolver()).configure();
Validator validator = config.buildValidatorFactory().getValidator();

4. ConstraintViolation 違規描述接口

驗證失敗時返回 Set<ConstraintViolation<T>>,提供訊息、屬性路徑、無效值等豐富上下文:

Set<ConstraintViolation<Employee>> violations = validator.validate(employee);
for (ConstraintViolation<Employee> v : violations) {
    System.out.println(v.getMessage());
}

5. MessageInterpolator 訊息插值器:客製化錯誤輸出

預設從類路徑 ValidationMessages.properties 讀取,亦可在註解 message 屬性覆蓋。實現 MessageInterpolator 介面可注入業務相關的動態插值邏輯:

Configuration<?> config = Validation.byDefaultProvider().configure();
config.messageInterpolator(new MyMessageInterpolator(config.getDefaultMessageInterpolator()));

架構圖解

Bean Validation 接口與 Hibernate 4.0 實現關係圖

圖示展示了規範 API 與 Hibernate Validator 4.0 具體實現類的對應關係,為 SPI 擴展開發提供直觀導航。

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