Java bean验证中的并发性
阅读JSR-303的规范: 约束验证实现实例的生命周期未定义 在使用约束实现之前,Bean验证提供程序将调用initialize方法 每次验证给定值时,Bean验证提供程序都会对isValid方法进行评估。它回来了 如果值无效,则为false,否则为trueisValid实现必须是线程安全的。 我不太明白。在每次isValid调用之前调用initialize,并且isValid应该是线程安全的吗?这是否意味着我不能在initialize中的类级别存储任何内容,以便以后从isValid访问它?我特别需要传递给初始化的注释实例Java bean验证中的并发性,java,bean-validation,Java,Bean Validation,阅读JSR-303的规范: 约束验证实现实例的生命周期未定义 在使用约束实现之前,Bean验证提供程序将调用initialize方法 每次验证给定值时,Bean验证提供程序都会对isValid方法进行评估。它回来了 如果值无效,则为false,否则为trueisValid实现必须是线程安全的。 我不太明白。在每次isValid调用之前调用initialize,并且isValid应该是线程安全的吗?这是否意味着我不能在initialize中的类级别存储任何内容,以便以后从isValid访问它?我特
有人能解释一下吗?它并没有说在每次调用
isValid()
之前都应该调用initialize()
。对于同一注释,在多次调用isValid()
之前只能调用一次。例如,他说:
初始化验证器以准备isValid调用
对每个约束调用一次initialize()
方法,而对约束的每个验证调用isValid()
将传递给isValid()
的注释(或其单个属性)存储到验证器的字段中,然后从isValid()
访问它,这是完全可以的。您可以在参考指南中找到一个示例
您只需要确保您的
isValid()
方法可以由多个线程并行调用(例如,您可能无法在没有同步的情况下从isValid()
中更改验证器的状态)。还想提到,每个类都使用initialize()初始化验证器
因此,如果DummyClassA和DummyClassB使用相同的验证器,则将分别调用initialize两次。DummyClassB将初始化自己的验证器,不会使用DummyClassA初始化的验证器,反之亦然。DummyClassA或DummyClassB的任何新实例都将对每个实例使用相同的验证器。因此,如果您有四个DummyClassA实例,它们都将使用为DummyClassA初始化的相同验证器
所以…DummyClassA与验证器有多对一关系,DummyClassB与valdiator也有多对一关系
这是我的团队和我在阅读您阅读的文章时非常好奇的事情,并且担心它不是线程安全的等等 它说“在任何使用之前”,不是吗?@Arash:据我所知,“在任何使用之前”并不意味着“在每次使用之前”,它意味着不允许使用未初始化的实例。