[Java] Wo befindet sich die Implementierungsklasse der Annotation, die in BeanValidation vorhanden ist?

Hintergrund

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.

Umfrageergebnisse

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.

Zusammenfassung

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.

Verweise

Site, die die Lösung ausgelöst hat

NotBlankValidator.java

ConstraintHelper.java

Recommended Posts

[Java] Wo befindet sich die Implementierungsklasse der Annotation, die in BeanValidation vorhanden ist?
Dies und das der Implementierung der zeitlichen Beurteilung von Daten in Java
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
Die Geschichte, dass .java auch in Unity 2018 erstellt wurde
[Spring Boot] Die Geschichte, dass die Bean der Klasse mit der Annotation ConfigurationProperties nicht gefunden wurde
Java-Implementierung von Tri-Tree
[Rails] Bei der Beschreibung der Validierung ist Vorsicht geboten
Wo ist die Zeitzone von Javas LocalDateTime.now ()?
Implementierung einer ähnlichen Funktion in Java
Mechanismus und Merkmale der in Java häufig verwendeten Collection-Implementierungsklasse
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
Untersuchen Sie die Liste der Zeitzonen-IDs, die in der Java ZoneId-Klasse verfügbar sind
Wenn der Bean-Klassenname dupliziert wird
Was ist eine Klasse in der Java-Sprache (3 /?)
Implementierung von DBlayer in Java (RDB, MySQL)
Holen Sie sich das Ergebnis von POST in Java
Code des Teils, in dem server.servlet.session.timeout in spring.session.timeout im spring-boot2-System festgelegt ist
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
Was ist die Hauptmethode in Java?
Wo die Follow-Funktion implementiert ist
Fehler, wenn das in SpringWebFlux verwendete Mitglied der Entity-Klasse endgültig ist
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
Ab Java9 werden Klassenkonstruktoren, die primitiven Typen entsprechen, als veraltet markiert.
Die Geschichte des Schreibens von Java in Emacs
Überprüfung von "seltsamem Java" und Java-Wissen, das in Java Bronze oft vergessen wird
[Rails] Implementierung einer Validierung, die die Eindeutigkeit beibehält
[Java] Implementieren Sie eine Funktion, die eine im Builder-Muster implementierte Klasse verwendet
Code zum Löschen aller Dateien mit dem angegebenen Präfix in AWS S3 (Java)
Ursache ist nicht sichtbar, wenn Methoden anderer Klassen in Java aufgerufen werden
[Java] Tag ab Datum berechnen (Kalenderklasse nicht verwenden)
Korrespondenz des Teils, in dem die Authentifizierung # getDetails im Komponententest der Federsicherheit durchgeführt wird
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
Über die Idee anonymer Klassen in Java
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Messen Sie die Größe eines Ordners mit Java
Spüren Sie den Lauf der Zeit auch in Java
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
[Java] In der Ausgabe wird etwas als "-0.0" angezeigt
Importieren Sie Dateien derselben Hierarchie in Java
Allzweck-StringConverter-Klasse, die Generika in Java8 verwendet
Erster Touch der Files-Klasse (oder Java 8)
[Ruby on Rails] Implementierung einer Validierung, die nur funktioniert, wenn die Bedingungen erfüllt sind
So erhalten Sie den Klassennamen des Arguments von LoggerFactory.getLogger, wenn Sie SLF4J in Java verwenden
Java Allzweckmethode, die nur die Unterschiede zwischen den Eigenschaften von Objekten derselben Klasse abruft
Grundlagen der Java-Fehlerbehandlung - Die Geschichte, die abfängt, wird nur im Vordergrund aufgegriffen
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
In Time.strptime ist% j (Gesamtdatum des Jahres)
Ein kurzer Überblick über Java, das in Klasse 4 gelernt wurde
Der Vergleich von enum ist == und gleich ist gut [Java]
Schreiben einer Klasse, die in Java bestellt werden kann Ein kleines Standard-Memo
Rufen Sie den Namen des Testfalls in der JUnit-Testklasse ab
Was ist besser, Kotlin oder zukünftiges Java?
Durchsuchen Sie Klassenobjekte in Kotlin (anstelle der Java-Klasse name.class).
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR