首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.validation.Validation多个实例化Vs重用单个Validator实例

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

Stack Overflow用户
提问于 2013-10-09 21:11:12
回答 2查看 4.9K关注 0票数 9

我使用javax.validation.Validation来验证jpa实体。我总是对同一个实体进行验证。

我想知道是否最好在每次验证时都使用一个Validator进行所有验证,或者实例化一个新的Validator。

同样,在计算方面,每次我想使用一个新的验证器时,实例化它的代价有多大?

Option1:为每个验证实例化新的验证器。

代码语言:javascript
复制
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);



    }


}

Option2:用于所有验证的单个验证器。

代码语言:javascript
复制
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);



    }


}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-09 21:20:12

注意Validator javadoc是如何声明的

验证bean实例。这个接口的实现必须是线程安全的.

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

同样,在计算方面,每次我想使用一个新的验证器时,实例化它的代价有多大?

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

票数 11
EN

Stack Overflow用户

发布于 2016-10-22 18:14:05

显然,根据不同的类型,重复使用相同的类型。

所选的答案并不解释为什么重用验证器应该取决于被验证对象的类型。如果线程安全得到保证,我看不出它应该如何使用的任何限制。api没有指定这样的限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19282815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档