当validatedBy为空时,HibernateValidator如何找到ConstraintValidator?

时间:2016-08-15 14:04:47

标签: java hibernate hibernate-validator

我想知道Hibernate如何找到扩展NullValidator接口的ConstraintValidator类,即使@Null注释定义如下:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { })
public @interface Null {}

1 个答案:

答案 0 :(得分:4)

仅需要为自定义(即用户创建的)约束指定

validatedBy。 Hibernate已知的所有内置约束都会自动映射。请参阅以下代码,该代码显示在ConstraintDescriptorImplXmlMappingParser

if ( constraintHelper.isBuiltinConstraint( annotationType ) ) {
    constraintDefinitionClasses.addAll( constraintHelper.getBuiltInConstraints( annotationType ) );
}
else {
    Class<? extends ConstraintValidator<?, ?>>[] validatedBy = annotationType
            .getAnnotation( Constraint.class )
            .validatedBy();
    constraintDefinitionClasses.addAll( Arrays.asList( validatedBy ) );
}

ConstraintHelper包含所有内置约束的列表,isBuiltinConstraint方法可为这些注释类型找到这些约束。