gpt4 book ai didi

javax.validation.Validation 多重实例化与重用单个 Validator 实例

转载 作者:行者123 更新时间:2023-11-30 07:13:37 45 4
gpt4 key购买 nike

我正在使用 javax.validation.Validation 来验证 jpa 实体。我总是针对相同的实体进行验证。

我想知道是对所有验证使用一个 validator 更好,还是每次验证时实例化一个新 validator 更好。

此外,每次我想使用它时实例化一个新的 validator 对我来说在计算方面有多昂贵?

选项 1:为每个验证实例化新的 validator 。

public class Validator
{

public static void main(String[] args)
{


//Validation1
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Entity entityToValidate = new Entity();
entityToValidate.setEmail("NOT_A_VALID_EMAIL@@@tomanyat.com");
Set<ConstraintViolation<T>> constraintViolations = validator.validate(entityToValidate);





//Validation2 (Note that validator has been created yet a second time !! )
Validator validator2 = factory.getValidator();

Entity entityToValidate2 = new Entity();
entityToValidate.setEmail("NOT_A_VALID_EMAIL@@@tomanyat.com");

Set<ConstraintViolation<T>> constraintViolations2 = validator2.validate(entityToValidate);



}


}

选项 2:所有验证的单个 validator 。

public class Validator
{

public static void main(String[] args)
{
//Validator created only once
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();


//Validation #1
Entity entityToValidate = new Entity();
entityToValidate.setEmail("NOT_A_VALID_EMAIL@@@tomanyat.com");

Set<ConstraintViolation<T>> constraintViolations = validator.validate(entityToValidate);




//Validation #2
Entity entityToValidate2 = new Entity();
entityToValidate.setEmail("NOT_A_VALID_EMAIL@@@tomanyat.com");


Set<ConstraintViolation<T>> constraintViolations2 = validator .validate(entityToValidate);



}


}

最佳答案

请注意 Validator javadoc 的状态

Validates bean instances. Implementations of this interface must be thread-safe.

因此,Validator 不应该真正包含状态,除非该状态也是线程安全的。因此,您不需要创建新的 Validator 实例,只需重复使用同一个实例,显然取决于类型。

As well, how expensive in terms of computation is it for me to instantiate a new validator each time I would like to use it?

这取决于您的 validator 。但是实例化(创建但不初始化对象)本身几乎完全可以忽略不计,尤其是当您考虑 JPA 实现执行的所有处理时。

关于javax.validation.Validation 多重实例化与重用单个 Validator 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282815/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com