如何在没有框架的情况下通过 hibernate-validation 使用 Java Beans 验证?
How to use Java Beans validation through hibernate-validation without a framework?
我在 JavaFX 应用程序上通过 hibernate-validation 使用 Java Beans 验证,因此,没有框架来帮助连接。我将这些依赖项添加到我的项目中:
compile group: "org.hibernate", name: "hibernate-validator", version: "6.0.2.Final"
compile group: "org.glassfish", name: "javax.el", version: "3.0.1-b08"
compile group: "javax.validation", name: "validation-api", version: "2.0.0.Final"
我发现这可以让 modelObject
得到验证:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
validator.validate(modelObject);
我的问题是,每次验证时都创建一个新的工厂和验证器是不是不好?我应该将它们缓存在某个地方并重新使用它们吗?验证器的成本和多线程程度如何?
每次都新建ValidatorFactory
不好吗?
根据javadoc注释,说明如下:
- The ValidatorFactory object built by the bootstrap process should be cached and shared amongst Validator consumers.
- This class is thread-safe.
自 Validator
起,根据 javadoc
,其实现也有望成为 线程安全
在 Spring
中与 javax.Validation 合作
您已使用 'Spring' 标记您的问题,因此请注意如何正确使用 javax.validation + Spring。
首先,使用 Spring LocalValidatorFactoryBean
(例如回答 here),这将处理您正在寻找的必要缓存:
@Bean
public javax.validation.Validator localValidatorFactoryBean() {
return new LocalValidatorFactoryBean();
}
其次,也使用 Spring 注入 Validator 实例:
@Autowired
private Validator validator;
您可以让 Spring 完成所有工作。例如,要使与验证相关的注释适用于方法,请定义
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
在您的 Spring 应用程序配置中,然后您就可以调用
public void myMethod(@Valid MyValidationAnnotatedType parameter){
...
}
public void anotherMethod(@Pattern(regex = "^[A-Za-z]+$") stringParameter) {
...
}
详情请参考Spring documentation
我在 JavaFX 应用程序上通过 hibernate-validation 使用 Java Beans 验证,因此,没有框架来帮助连接。我将这些依赖项添加到我的项目中:
compile group: "org.hibernate", name: "hibernate-validator", version: "6.0.2.Final"
compile group: "org.glassfish", name: "javax.el", version: "3.0.1-b08"
compile group: "javax.validation", name: "validation-api", version: "2.0.0.Final"
我发现这可以让 modelObject
得到验证:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
validator.validate(modelObject);
我的问题是,每次验证时都创建一个新的工厂和验证器是不是不好?我应该将它们缓存在某个地方并重新使用它们吗?验证器的成本和多线程程度如何?
每次都新建ValidatorFactory
不好吗?
根据javadoc注释,说明如下:
- The ValidatorFactory object built by the bootstrap process should be cached and shared amongst Validator consumers.
- This class is thread-safe.
自 Validator
起,根据 javadoc
在 Spring
中与 javax.Validation 合作您已使用 'Spring' 标记您的问题,因此请注意如何正确使用 javax.validation + Spring。
首先,使用 Spring LocalValidatorFactoryBean
(例如回答 here),这将处理您正在寻找的必要缓存:
@Bean
public javax.validation.Validator localValidatorFactoryBean() {
return new LocalValidatorFactoryBean();
}
其次,也使用 Spring 注入 Validator 实例:
@Autowired
private Validator validator;
您可以让 Spring 完成所有工作。例如,要使与验证相关的注释适用于方法,请定义
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
在您的 Spring 应用程序配置中,然后您就可以调用
public void myMethod(@Valid MyValidationAnnotatedType parameter){
...
}
public void anotherMethod(@Pattern(regex = "^[A-Za-z]+$") stringParameter) {
...
}
详情请参考Spring documentation