2011-09-15 3 views
1

現在、Jerseyプロジェクトで作業しており、パラメータの検証にHibernateバリデーターを使用することに決めました。エンドポイントクラスに注入されたすべての依存関係は適切に初期化されます。ただし、ConstraintValidatorクラスの依存関係の場合、常にNPEが送出されます。だから、スプリングのガイド+ガイドを休止状態を追跡しオートワイヤーを使用しないでhibernateバリデーター

ビーンID =「バリ」クラス=「org.springframework.validation.beanvalidation.LocalValidatorFactoryBean」

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

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

答えて

1

"Hibernateバリ - JSR 303リファレンス実装 - リファレンスガイド" portalityについて何かを言う:

に実装に固有ConstraintValidatorFactory 行動(依存性の注入、に依存する任意の制約実装を警告

no no-arg コンストラクタなど)は、移植可能とはみなされません。

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

バリデータの意味は通常で、読み取り専用であり、呼び出すことによって副作用が発生しないように注意する必要があります。たとえば、(トランザクション)サービスを呼び出すか、バリデーター内のデータを読み取ることによって、自動フラッシングが発生するため、誤ってデータをデータベースにフラッシュしないでください。

+0

入力いただきありがとうございます – geneqew

関連する問題