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"/>