Wenn Sie die Validierung in Java oder Spring implementieren, können Sie die Bean-Validierung wie "@ NotNull" oder "@ NotBlank" verwenden.
Bei der Implementierung habe ich mich gefragt, welche Implementierungsklasse mit diesen Anmerkungen verknüpft ist. Daher habe ich mir den Quellcode angesehen, aber validatedBy von @ Constraint
war leer. ..
Nehmen Sie als Beispiel die NotBlank-Annotation [^ 1] im Paket javax.validation.constraints.
NotBlank.java
@Documented
@Constraint(validatedBy = { }) //Die Klasse, in die der Inhalt der Validierung geschrieben wird, wird nicht durch ← angegeben
@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();
}
}
Dieses Mal habe ich die Klasse untersucht, die dem Speicherort des Implementierungsergebnisses dieser Annotation zugeordnet ist.
Bei der Suche bei Google wurde dieselbe Frage im Stackoverflow von [hier] gestellt (https://stackoverflow.com/questions/36477544/javax-validation-implementation), und ich konnte die Implementierungsklasse kennen. ..
Das ist hier org NotBlankValidator-Klasse unter .hibernate.validator.internal.constraintvalidators.bv.
Daraus wurde festgestellt, dass sich die Annotation und ihre Implementierungsklasse nicht in derselben Bibliothek befinden, sondern in verschiedenen Bibliotheken.
Die Klasse, die diese verknüpft, befindet sich in derselben Bibliothek wie die Implementierungsklasse und hier Es stellte sich heraus, dass es durch die ConstraintHelper-Klasse unter org.hibernate.validator.internal.metadata.core (/hibernate/validator/internal/metadata/core/ConstraintHelper.java) verknüpft ist.
Dieses Mal stellte ich fest, dass die Implementierungsklasse der Annotation, die in javax.validation.constraints von BeanValidation vorhanden ist, unter org.hibernate.validator.internal.constraintvalidators.bv vorhanden ist.
Wir haben auch festgestellt, dass diese Klassen durch die ConstraintHelper-Klasse unter org.hibernate.validator.internal.metadata.core verknüpft sind.
Ich verstehe jedoch nicht, warum die Annotation und die Implementierungsklasse in verschiedenen Bibliotheken vorhanden sind. Es scheint, dass die Beziehung zwischen BeanValidation und Hibernate involviert ist, aber ist es so, als würde man die Schnittstelle und die Implementierung unter Berücksichtigung der Erweiterbarkeit trennen?
Wenn jemand über diesen Punkt Bescheid weiß, würde ich es begrüßen, wenn Sie es mir sagen könnten.
Bis zum Ende Danke fürs Lesen.
Site, die die Lösung ausgelöst hat
Recommended Posts