42

Hibernate Validator Beanを作成しようとしていたところ、別のクラスの静的ファクトリメソッドからBeanを作成するときにこの問題が発生しました。Validator Beanを初期化するSpringの方法を見つけました(一番下の解決策)が、問題自体は未解決のままです。ここでは、バリデーターを例として使用します。

これが私がJavaでValidatorインスタンスを作成する方法です

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

これが、applicationContext.xmlでBeanを作成しようとした方法です。

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-method="javax.validation.Validation.buildDefaultValidatorFactory" />

<bean id="validator" 
    class="javax.validation.Validator" 
    factory-bean="validatorFactory"
    factory-method="getValidator" />

私が理解しているのは、「factory-method」では、「class」パラメーターで定義されたクラスで定義された静的メソッドにしかアクセスできないということです。メソッドbuildDefaultValidatorFactory()は静的であるため、Validationのインスタンスを作成して、次のようにvalidatorFactoryの「factory-bean」として指定することはできません。

<bean id="validation" class="javax.validation.Validation" />

<bean id="validatorFactory" 
    class="javax.validation.ValidatorFactory" 
    factory-bean="validation"
    factory-method="buildDefaultValidatorFactory" />

これはエラーメッセージになります

「指定された名前のメソッドが存在し、静的でないことを確認してください」

質問は、春のこのような状況でどのように豆を作成しますか?

これが私がバリデーターの問題を解決した方法です:

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

2 に答える 2

52

にはfactory-methodメソッド名のみを含める必要があり、クラス名は含めないでください。

静的ファクトリを使用する場合classは、ファクトリ(!)のをBean宣言に指定します。インスタンスファクトリを使用する場合はfactory-bean、Bean宣言にを指定しますが、両方を指定しないでください。作成されたクラスBeanは、Bean宣言で指定されていません。

したがって、完全な例は次のようになります。静的ファクトリvalidatorFactoryとインスタンスファクトリを使用しvalidatorます。

<bean id="validatorFactory" 
    class="javax.validation.Validation" 
    factory-method="buildDefaultValidatorFactory" />

<bean id="validator" 
    factory-bean="validatorFactory"
    factory-method="getValidator" />

ドキュメントの詳細を参照してください。

http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-class-static-factory-method

あなたの質問に答えるために-春のこのような状況でどのように豆を作りますか?-ここに示されているとおりに実行するか、可能であればLocalValidatorFactoryBean、Springの構成を簡素化するのようなユーティリティクラスを使用します。

于 2012-03-27T07:48:57.640 に答える
0

これを試しましたか?

<bean id="validatorFactory" 
class="javax.validation.Validation" 
factory-method="buildDefaultValidatorFactory" />

<bean id="validator" 
class="javax.validation.Validator" 
factory-bean="validatorFactory"
factory-method="getValidator" />
于 2012-03-27T07:56:12.570 に答える