Spa*_*eri 42 java spring bean-validation applicationcontext
我试图创建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();
Run Code Online (Sandbox Code Playgroud)
这就是我尝试在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" />
Run Code Online (Sandbox Code Playgroud)
我的理解是,在"工厂方法"中,您只能访问在"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" />
Run Code Online (Sandbox Code Playgroud)
这最终会出现错误消息
"检查是否存在具有指定名称的方法,并且它是非静态的 "
问题是你如何在Spring的这种情况下创建bean?
这就是我解决Validator问题的方法:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
Run Code Online (Sandbox Code Playgroud)
Chr*_*rau 51
本factory-method应该只包含方法的名称,不包括类名.
如果要使用静态工厂,class请将工厂(!)赋予bean声明,如果要使用实例工厂,请提供factory-beanbean声明,但不要同时给出:创建的类bean声明中没有给出bean.
因此,完整的示例应该如下所示,使用静态工厂validatorFactory和实例工厂validator:
<bean id="validatorFactory"
class="javax.validation.Validation"
factory-method="buildDefaultValidatorFactory" />
<bean id="validator"
factory-bean="validatorFactory"
factory-method="getValidator" />
Run Code Online (Sandbox Code Playgroud)
查看文档的详细信息:
回答你的问题 - 你如何在Spring的这种情况下创建bean?- 完全如此处所示,或者如果可以的话,使用类似的实用程序类LocalValidatorFactoryBean,这简化了Spring配置.
| 归档时间: |
|
| 查看次数: |
55392 次 |
| 最近记录: |