我试图创建Hibernate Validator bean,并遇到了这个问题,在另一个类中从静态工厂方法创建一个bean。我发现Spring方法让我的Validator bean初始化(解决方案在底部),但问题本身仍未解决。此处使用验证器作为示例。从另一个类的静态方法初始化Spring bean?
这是我如何使用Java创建的校验器实例
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" />
我的理解是,在“出厂方法“,您只能访问在”class“参数中定义的Class中定义的静态方法。由于该方法buildDefaultValidatorFactory()是静态的,我不能创建验证的一个实例,并把它作为“工厂豆”为validatorFactory这样的:
<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"/>
类名是为了证明我想要做的事情。正如我所说的“我所了解的是,在”工厂方法“中,只能访问在”类“参数中定义的类中定义的静态方法。” – Spaideri 2012-03-27 07:56:24
这是正确的 - 如果您给出'class'参数,那么工厂方法必须是该类的静态方法,如创建'validatorFactory'所示。 – 2012-03-27 13:10:42