1

私は現在、Jersey プロジェクトに取り組んでおり、パラメーターの検証に Hibernate バリデーターを使用することにしました。エンドポイント クラスに挿入されたすべての依存関係が適切に初期化されます。ただし、ConstraintValidator クラスの依存関係については、常に NPE をスローします。だから私はSpring + hibernateガイドのガイドに従って登録しました

bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"

注入する必要がある ConstraintValidator クラスのサービスに @Autowired アノテーションを使用しました。

それを使用することの副作用はありますか?ConstraintValidator クラスの自動配線アノテーションを回避し、値を注入する方法はありますか? コンテキストにconstraintValidatorクラスをBeanとして手動で登録しようとしましたが、必要なサービスへのプロパティ参照を追加しましたが、nullポインタ例外がスローされました。

4

1 に答える 1

2

「Hibernate Validator - JSR 303 Reference Implementation - Reference Guide」は、ポータル性について次のように述べています。

警告

実装に固有の ConstraintValidatorFactory の動作 (依存関係の挿入、引数なしのコンストラクターなど) に依存する制約の実装は、移植可能とは見なされません。

それで、それは悪いことですか?私の意見では、そうではありません。もちろん、今は DI コンテナー (Spring) に結合されており、バリデーターを簡単に再利用することはできません (Spring を使用していない場合など)。一方、Spring ファクトリによって構築されたバリデーターを使用すると、フレームワークを最大限に活用して、非常に手間のかかる作業を行うことができます (エンティティのリビジョン データの読み取りと以前の状態の比較、任意のサービスの呼び出し、検証メッセージの強化またはローカライズなど)。 .)。

非常に注意しなければならないことの 1 つは、バリデーターのセマンティクスは通常は読み取り専用であり、呼び出しによって副作用が発生しないようにすることです。たとえば、(トランザクション) サービスの呼び出しやバリデーター内のデータの読み取りによる自動フラッシュが原因で、誤ってデータをデータベースにフラッシュしないでください。

于 2011-09-30T20:32:09.143 に答える