从另一个类的静态方法初始化Spring bean?
我试图创buildHibernate Validator bean,并遇到这个问题,从另一个类的静态工厂方法创build一个bean。 我发现Spring方法让我的Validator bean初始化(解决scheme在底部),但问题本身仍然没有解决。 此处使用Validator作为示例。
这是我如何在Java中创buildValidator实例
import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator();
这是我尝试在applicationContext.xml中创buildbean的方式
<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”参数中定义的类中定义的静态方法。 由于方法buildDefaultValidatorFactory()是静态的,我不能创build一个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的这种情况下创buildbean?
这就是我解决Validator问题的方法:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
factory-method
应该只包含方法名称,不包括类名称。
如果你想使用一个静态工厂,把工厂的class
(!)给予bean声明,如果你想使用一个实例工厂,给factory-bean
的bean声明,但不要同时提供:创build的bean的类没有在bean声明中给出。
所以一个完整的例子应该像这样,使用validatorFactory
的静态工厂和validatorFactory
的实例工厂:
<bean id="validatorFactory" class="javax.validation.Validation" factory-method="buildDefaultValidatorFactory" /> <bean id="validator" factory-bean="validatorFactory" factory-method="getValidator" />
查看文档的详细信息:
回答你的问题 – 在这种情况下,你将如何创buildbean? – 完全按照此处显示的内容进行操作,或者如果可以,请使用像LocalValidatorFactoryBean
这样的实用程序类,它简化了Springconfiguration。
你试过这个吗?
<bean id="validatorFactory" class="javax.validation.Validation" factory-method="buildDefaultValidatorFactory" /> <bean id="validator" class="javax.validation.Validator" factory-bean="validatorFactory" factory-method="getValidator" />