Java Bean 検証で使用するカスタム アノテーションを指定しました。すべてのフィールドに同じ注釈クラスを使用し、次のように、フィールドの名前を含む文字列パラメーターを渡します。
@CustomConstraint(value="name")
private String name;
@CustomConstraint(value="address1")
private String addressLine1;
私の制約バリデーターは、検証クラスのインターフェースに文字列キー (フィールドの名前) をマップする HashMap を維持します。次のように、特定のフィールド名と、フィールドの検証に使用されるインターフェイスの具体的なサブクラスを組み合わせて、このマップを静的に初期化します。
private static final Map<String, CustomValidatorClass> fieldMapper;
static {
Map<String, CustomValidatorClass> map = new HashMap<String, CustomValidatorClass>();
map.put("name", new NameValidator());
map.put("address1", new Address1Validator());
fieldMapper = Collections.unmodifiableMap(map);
}
私の懸念は、この初期化プロセスが非常に高価になる可能性があり (私は数十のフィールドを持っています)、検証しているすべての単一フィールドに対して初期化される可能性があることです。注釈を一度初期化して再利用するか、これがデフォルトの動作であることを指定する方法があることを願っています。
編集:私はBean検証とともにJSF 2.0を使用しているため、これらの注釈を直接読み取ったり呼び出したりしていません。これはフレームワークによって処理されるため、フレームワークがどのように動作しているかを正確に判断できませんでした。