我试图创建 Hibernate Validator bean,并在另一个类中从静态工厂方法创建 bean 时遇到了这个问题。我找到了一种 Spring 方法来初始化我的 Validator bean(底部的解决方案),但问题本身仍未解决。这里使用验证器作为示例。
这就是我在 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" />
我的理解是,在“工厂方法”中,您只能访问“类”参数中定义的类中定义的静态方法。由于 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" />
这最终导致错误消息
“检查具有指定名称的方法是否存在并且它是非静态的”
问题是您将如何在 Spring 的这种情况下创建 bean?
这就是我解决验证器问题的方法:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>