0

「X is valid IFF Service Y returns Z」という形式のビジネス検証ロジックがいくつかあります。ここで、X と Z はコンパイル時に認識され、Y の場所は Spring 構成ファイルからロードされます。

JSR-303 注釈ベースの検証を Spring 構成と共に使用したいので、次のようなコードを記述できます。

カスタム クラス レベルの制約の注釈:

@MyValidation
public class X { .... }

@MyValidationの ConstraintValidator :

public class MyValidationValidator implements ConstraintValidator<MyValidation, X> {
   private MyService service;
   public MyService getService() { return service; }
   public void setService(MyService serv) { this.service = serv; }
   //Validation Logic...
}

春の設定:

<bean id="ServiceY" class="...">
   ...
</bean>
<bean id="mvv" class="MyValidationValidator">
   <property name="service" value="ServiceY" />
</bean>

しかし、バリデーターのプロパティが設定されていないため、これらをそのように組み合わせようとする私の試みは失敗しています。

現在、Spring AOP Interceptors を回避策として使用していますが、それは私の考えでは理想的ではありません。

ここでの他の質問の 1 つは、プロパティ ファイル/プロパティを使用することを考えさせましたが、サービスの構成を繰り返す必要はありませんか?

別の人は、制約マッピングをプログラムで定義することについて言及しましたが、私がそうしている場合、おそらく回避策を講じたほうがよいでしょう。

その動的構成を行う方法についての手がかりはありますか?

4

1 に答える 1

0

Spring を使用LocalValidatorFactoryBeanして Bean Validation バリデーターをセットアップする必要があります。

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

そのように設定されたConstraintValidatorFactoryバリデーターは、作成されたバリデーターインスタンスで依存性注入を実行する実装を内部的に使用serviceします。バリデーターのフィールドを@Injectまたはでマークするだけ@Autowiredです。制約バリデーター自体を Spring Bean としてセットアップする必要はないことに注意してください。

詳細については、Springリファレンス ガイドを参照してください。

于 2013-03-27T23:14:07.520 に答える