Java bean验证中的并发性

Java bean验证中的并发性,java,bean-validation,Java,Bean Validation,阅读JSR-303的规范: 约束验证实现实例的生命周期未定义 在使用约束实现之前,Bean验证提供程序将调用initialize方法 每次验证给定值时,Bean验证提供程序都会对isValid方法进行评估。它回来了 如果值无效,则为false,否则为trueisValid实现必须是线程安全的。 我不太明白。在每次isValid调用之前调用initialize,并且isValid应该是线程安全的吗?这是否意味着我不能在initialize中的类级别存储任何内容,以便以后从isValid访问它?我特

阅读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:据我所知,“在任何使用之前”并不意味着“在每次使用之前”,它意味着不允许使用未初始化的实例。