[JAVA] Erste Schritte mit der Verarbeitung von Doma-Annotationen

Einführung

Die Annotationsverarbeitung (Annotation Processing) ist das charakteristischste Merkmal von Doma und auch ein Dämon.

Die Beschreibung basiert auf dem neuesten Doma 2.44.1, gilt jedoch grundsätzlich für alle Versionen.

Bitte lesen Sie auch Einführung in Doma, um eine Einführung in andere Funktionen von Doma zu erhalten.

Was ist die Verarbeitung von Anmerkungen?

Annotation kann verwendet werden, um die Annotation zu lesen, die dem Quellcode beim Kompilieren gegeben wurde, und um einen anderen Quellcode oder Bytecode zu generieren. Ich werde.

Doma ist eine Art Framework, das Quellcode generiert. Beispielsweise generiert Micronaut Bytecode.

Aus Sicht des Benutzers hat der Typ, der den Quellcode generiert, den Vorteil, dass er leicht zu debuggen ist, da er den Code lesen und Haltepunkte setzen kann, und der Typ, der den Bytecode generiert, hat den Vorteil, dass die Kompilierungszeit übersprungen werden kann.

Vorteile der Annotationsverarbeitung

Ich denke, es gibt drei Hauptvorteile.

  1. Kesselplattenkabel kann reduziert werden
  2. Beim Kompilieren kann ein Fehler festgestellt werden
  3. Kann den Bootstrap (Initialisierung) zur Laufzeit beschleunigen

Kesselplattenkabel kann reduziert werden

Die Reduzierung des Kesselplattencodes ist nicht auf die Annotationsverarbeitung beschränkt, sondern kann beispielsweise auch durch Reflexion erreicht werden. In dieser Hinsicht kann ein Produkt namens AutoValue hilfreich sein, um die Verarbeitung von Anmerkungen mit anderen Techniken zu vergleichen. Diese Folie ist besonders interessant.

Obwohl in der AutoValue-Folie nicht erwähnt, sind die Vorteile der Annotationsverarbeitung in Bezug auf die Reflexion erheblich, wenn es um die native Bildgebung geht. Dies liegt daran, dass Sie beim Erstellen eines nativen Bilds die Reflexionsbeschränkung vermeiden können.

Kann Fehler beim Kompilieren erkennen

In Bezug auf diesen Punkt Reduzieren Sie, was Sie nicht wissen, wenn Sie sich nicht bewegen " //qiita.com/nakamura-to/items/099cf72f5465d0323521#1- Reduzieren Sie, was Sie nicht wissen, wenn Sie sich nicht bewegen.

Schnellerer Bootstrap zur Laufzeit

Der Grund, warum der Bootstrap zur Laufzeit beschleunigt werden kann, besteht darin, dass Metadaten, die andernfalls zur Laufzeit generiert und im Speicher gehalten würden, zur Kompilierungszeit als Klasse generiert werden können.

Der Ruhezustand ist ein typisches DB-Zugriffsframework, dessen Bootstrap relativ lange dauert. Der Ruhezustand liest die Informationen der Entitätsklasse durch Reflektion, um SessionFactory (EntityManagerFactory bei Verwendung als JPA) zu erstellen, und führt verschiedene Verarbeitungen durch. Wenn Sie eine kleine Anzahl von Entitätsklassen haben, werden Sie dies überhaupt nicht bemerken. Wenn Sie jedoch eine große Anzahl haben, werden Sie feststellen, dass die Initialisierung erheblich länger dauert. Wenn Sie die Protokollebene auf Ablaufverfolgung usw. einstellen, können Sie sehen, was Sie tun.

In Quarkus Hibernate Extension habe ich ungefähr 100 Entitäten erstellt und die Stichprobe ausgeführt, da ich dachte, dass es Gegenmaßnahmen geben könnte, aber zu Beginn Dutzende. Es dauerte eine Sekunde, daher schien es keine Gegenmaßnahmen zu geben (ich habe es im JVM-Modus versucht, aber im Native-Modus kann es anders sein).

Mit Doma hingegen können Sie die benötigten Metadaten abrufen, indem Sie einfach eine Klasse laden, die bereits zur Laufzeit vorhanden ist. Darüber hinaus erhöht sich die Bootstrap-Zeit nicht, selbst wenn die Anzahl der Entitätsklassen zunimmt, da die Klassen nach Bedarf geladen werden, anstatt während des Bootstraps auf einmal geladen zu werden.

Dinge, auf die Sie bei der Verarbeitung von Anmerkungen achten sollten

Das Wichtigste ist, dass die IDE spezielle Einstellungen benötigt, um die Verarbeitung von Anmerkungen zu ermöglichen. Was Sie beachten müssen, hängt auch davon ab, ob Sie Maven oder Gradle als Build-Tool verwenden.

Ich habe am Anfang "Kimon" geschrieben, aber das meiste Phänomen, dass Doma nicht funktioniert, scheint mit dieser Einstellung zu tun zu haben.

Empfohlene IDE- und Build-Tools

In der IDE haben wir den Vorgang sowohl mit Eclipse als auch mit IntelliJ IEDA bestätigt. Ich mag es sehr, welches besser ist, aber Eclipse muss oft vorsichtiger sein, damit der Anmerkungsprozess funktioniert. Es ist jedoch keine große Sache, wenn Sie den Dreh raus haben, und da die Ausführung der Annotationsverarbeitung durch inkrementelle Kompilierung von Eclipse eine schnellere Rückmeldung ist als bei Verwendung von IDEA, wird Eclipse nur verwendet, weil es viele Punkte gibt, die Sie beachten müssen. Ich finde es schade, sie abzuschneiden (in IDEA funktioniert der Annotationsprozess nur, wenn Sie ihn explizit erstellen. In Eclipse funktioniert er jedoch jedes Mal, wenn Sie die Datei speichern, und der durch den Annotationsprozess verursachte Fehler wird schnell an den Entwickler zurückgemeldet. ).

Es wurde bestätigt, dass das Build-Tool mit Gradle und Maven zusammenarbeitet. Sie können beide verwenden, wie Sie möchten, aber ich persönlich habe wenig Know-how über die Kombination von Eclipse und Maven. Es scheint, dass ich oft vom Verhalten von M2 Eclipse abhängig bin. Ich weiß jedoch, dass die Ursache in der SQL-Datei liegt. Wenn Sie also nur die Criteira-API verwenden, sind Sie möglicherweise nicht so besorgt.

Es ist möglich, es auf Eclipse oder IEDA auszuführen, ohne Gradle oder Maven zu verwenden, aber ich empfehle es überhaupt nicht </ font>. Ich bin absolut süchtig nach verschiedenen Einstellungen, einschließlich abhängiger Bibliotheken, daher möchte ich auf jeden Fall, dass Sie entweder Gradle oder Maven verwenden.

Zusammenfassend sieht es so aus.

IDE Werkzeug erstellen Erläuterung
Eclipse Gradle Es wird später beschrieben.
Eclipse Maven Mangel an Know-how. In diesem Artikel nicht erwähnt. Suche Informationen.
IDEA Gradle Sie können es als Gradle-Projekt importieren.
IDEA Maven Sie können es als Maven-Projekt importieren.

Wichtige Punkte bei der Kombination von Eclipse und Gradle

Erstellen Sie zunächst ein Projekt mit Gradle. Es ist wichtig, zuerst als Gradle-Projekt zu arbeiten, nicht als Eclipse. Wir empfehlen, das folgende Projekt als Vorlage zu verwenden.

  • https://github.com/domaframework/getting-started

Dieses Projekt hat eine Gradle-Multiprojektstruktur. Auch wenn für die zu erstellende Version keine Konfiguration für mehrere Projekte erforderlich ist, können Sie diese Konfiguration für mehrere Projekte beibehalten. Obwohl dieses Projekt mit Kotlin DSL erstellt wurde, denke ich, dass es in Ordnung ist, Kotlin DSL weiterhin so zu verwenden, wie es ist (schreiben Sie es nicht mit Groovy DSL um), da dies auch die Umgestaltung erleichtert. Darüber hinaus verwendet dieses Projekt Gradle Wrapper, was meines Erachtens auch keinen Grund gibt, es nicht zu verwenden.

Das Wichtigste in einem Gradle-Projekt ist die Verwendung eines Gradle-Plugins namens com.diffplug.eclipse.apt. Dieses Plug-In gibt die Einstellungen für die Ausführung der Anmerkungsverarbeitung in Eclipse aus. Dieses Plug-In bindet Gradles Eclipse-Projekt ein, sodass Sie ./gradlew eclipse ausführen können, um die erforderlichen Konfigurationsdateien auszugeben. Nur für den Fall, immer mit der cleanEclipse-Aufgabe Es wird empfohlen, "./gradlew cleanEclipse eclipse" zu verwenden.

Erst nach der Ausgabe der obigen Konfigurationsdatei importieren Sie das Projekt in Eclipse. Da Eclipse Gradles Multiprojekt nicht erkennt, werden bei Verwendung der obigen Vorlage nur untergeordnete Projekte in Eclipse importiert. Wir erkennen jedoch, dass dies keine Rolle spielt.

Während des Entwicklungsprozesses kann es erforderlich sein, die Version der abhängigen Bibliothek zu aktualisieren oder die Einstellungen für die Annotationsverarbeitung zu ändern. Ändern Sie in diesem Fall zuerst das Build-Skript von Gradle, anstatt es über Eclipse zu ändern. Führen Sie danach ./gradlew cleanEclipse eclipse aus, um die Eclipse-Einstellungsdatei erneut auszugeben und das Eclipse-Projekt zu aktualisieren (laden Sie die Einstellungsdatei neu). Es ist sehr wichtig, dass das Gradle-Build-Skript immer positiv ist </ font>.

abschließend

Ich erklärte die Annotationsverarbeitung von Doma.

Kürzlich habe ich in einem Chat-Dienst namens Zulip einen Raum für Doma eröffnet. Wenn Sie Fragen zu Doma haben, können Sie diesen Chatraum besuchen.

  • https://domaframework.zulipchat.com/

Zum Beispiel kann die Beschreibung der Einstellungen für die Annotationsverarbeitung im Gradle-Build-Skript ein Problem sein, da es weltweit nur wenige Informationen gibt. Wenn Sie jedoch eine Frage stellen, kann ich Ihnen Ratschläge geben.

Natürlich begrüßen wir auch die Teilnahme von Personen, die bei der Entwicklung von Doma und verwandten Produkten von Doma zusammenarbeiten können, und von Personen, die Informationen austauschen können.

Recommended Posts