从另一个类的静态方法初始化Spring bean?
我试图创建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"/>
的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" />
查看文档的详细信息:
要回答你的问题 - 你如何在这种春季的情况下创建bean? - 完全按照此处显示的内容进行操作,或者如果可以,请使用类似LocalValidatorFactoryBean
这样的实用程序类,它可以简化Spring配置。
你试过这个吗?
<bean id="validatorFactory"
class="javax.validation.Validation"
factory-method="buildDefaultValidatorFactory" />
<bean id="validator"
class="javax.validation.Validator"
factory-bean="validatorFactory"
factory-method="getValidator" />
嗨!方法buildDefaultValidatorFactory是类javax.validation.Validation的静态方法 – Spaideri 2012-03-27 08:39:25
类名是为了证明我想要做的事情。正如我所说的“我所了解的是,在”工厂方法“中,只能访问在”类“参数中定义的类中定义的静态方法。” – Spaideri 2012-03-27 07:56:24
这是正确的 - 如果您给出'class'参数,那么工厂方法必须是该类的静态方法,如创建'validatorFactory'所示。 – 2012-03-27 13:10:42