Lors de l'implémentation de la validation dans Java ou Spring, vous pouvez utiliser la validation de bean comme @ NotNull
ou @ NotBlank
.
Lors de la mise en œuvre, je me suis demandé quelle était la classe d'implémentation associée à ces annotations, alors j'ai regardé le code source, mais le validatedBy de @ Constraint
était vide. ..
Prenez l'annotation NotBlank [^ 1] dans le package javax.validation.constraints comme exemple.
NotBlank.java
@Documented
@Constraint(validatedBy = { }) //La classe dans laquelle le contenu de la validation est écrit n'est pas spécifiée par ←
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
public @interface NotBlank {
String message() default "{javax.validation.constraints.NotBlank.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
/**
* Defines several {@code @NotBlank} constraints on the same element.
*
* @see NotBlank
*/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
public @interface List {
NotBlank[] value();
}
}
Cette fois, j'ai étudié la classe associée à l'emplacement du résultat d'implémentation de cette annotation.
Lorsque j'ai cherché sur Google, la même question a été posée dans stackoverflow de ici, et j'ai pu connaître la classe d'implémentation. ..
C'est ici org NotBlankValidator sous .hibernate.validator.internal.constraintvalidators.bv.
À partir de là, il a été constaté que l'annotation et sa classe d'implémentation ne sont pas dans la même bibliothèque, mais dans des bibliothèques différentes.
De plus, la classe qui les lie existe dans la même bibliothèque que la classe d'implémentation, et [ici](https://github.com/hibernate/hibernate-validator/blob/db7ae586508add6491f1443c8ab4e770d7cb2c20/engine/src/main/java/org Il s'est avéré qu'il est lié par la classe ConstraintHelper sous org.hibernate.validator.internal.metadata.core (/hibernate/validator/internal/metadata/core/ConstraintHelper.java).
Cette fois, j'ai trouvé que la classe d'implémentation de l'annotation qui existe dans javax.validation.constraints de BeanValidation existe sous org.hibernate.validator.internal.constraintvalidators.bv.
Nous avons également constaté que ces classes sont liées par la classe ConstraintHelper sous org.hibernate.validator.internal.metadata.core.
Cependant, je ne comprends pas pourquoi l'annotation et la classe d'implémentation prennent la peine d'exister dans différentes bibliothèques. Il semble que la relation entre BeanValidation et Hibernate soit liée, mais est-ce comme séparer l'interface et l'implémentation en tenant compte de l'extensibilité?
Si quelqu'un est au courant de ce point, j'apprécierais que vous me le disiez.
Jusqu'à la fin Merci d'avoir lu.
Site qui a déclenché la solution
Recommended Posts