[JAVA] Premiers pas avec le traitement Doma-Annotation

introduction

Le traitement des annotations (traitement des annotations) est la caractéristique la plus distinctive de Doma et est également un démon.

La description est basée sur la dernière Doma 2.44.1, mais elle s'applique essentiellement à toutes les versions.

Veuillez également lire Introduction à Doma pour une introduction aux autres fonctions de Doma.

Qu'est-ce que le traitement des annotations?

Annotation peut être utilisé pour lire l'annotation donnée au code source au moment de la compilation et générer un autre code source ou un autre code d'octet. Je vais.

Doma est un type de framework qui génère du code source, par exemple Micronaut génère du code octet.

Du point de vue de l'utilisateur, le type qui génère le code source a l'avantage d'être facile à déboguer car il peut lire le code et définir des points d'arrêt, et le type qui génère le code d'octet a l'avantage que le temps de compilation peut être ignoré.

Avantages du traitement des annotations

Je pense qu'il y a trois avantages principaux.

  1. Le cordon de la plaque de chaudière peut être réduit
  2. Une erreur peut être détectée au moment de la compilation
  3. Peut accélérer le bootstrap (initialisation) au moment de l'exécution

Le cordon de la plaque de chaudière peut être réduit

La réduction du code de la plaque de chaudière n'est pas limitée au traitement d'annotation, mais peut également être obtenue, par exemple, en réflexion. À cet égard, un produit appelé AutoValue peut être utile pour comparer le traitement des annotations avec d'autres techniques. Cette diapositive est particulièrement intéressante.

Bien que cela ne soit pas mentionné dans la diapositive AutoValue, en ce qui concerne la réflexion, les avantages du traitement des annotations sont importants lorsque l'on considère l'imagerie native. En effet, vous pouvez éviter la contrainte de réflexion lors de la création d'une image native.

Peut détecter des erreurs au moment de la compilation

Concernant ce point, l'article "10 choses qui sont importantes dans le développement de Doma" [Réduisez ce que vous ne savez pas à moins de vous déplacer](https :: //qiita.com/nakamura-to/items/099cf72f5465d0323521#1-Réduisez ce que vous ne savez pas si vous ne bougez pas).

Bootstrap plus rapide à l'exécution

La raison pour laquelle le bootstrap au moment de l'exécution peut être accéléré est que les métadonnées qui seraient autrement générées au moment de l'exécution et conservées en mémoire peuvent être générées en tant que classe au moment de la compilation.

Hibernate est un framework d'accès à la base de données typique qui prend un temps relativement long à démarrer. Hibernate lit les informations de la classe d'entité par réflexion pour créer SessionFactory (EntityManagerFactory lorsqu'il est utilisé comme JPA) et effectue divers traitements. Si vous avez un petit nombre de classes d'entités, vous ne le remarquerez pas du tout, mais si vous en avez un grand nombre, vous remarquerez que l'initialisation prend beaucoup plus de temps. Si vous définissez le niveau de journalisation sur trace, etc., vous pouvez voir ce que vous faites.

Dans Quarkus Hibernate Extension, j'ai créé environ 100 entités et exécuté l'exemple, en pensant qu'il pourrait y avoir des contre-mesures à ce sujet, mais des dizaines au moment où il démarre. Cela a pris une seconde, donc il ne semblait pas y avoir de contre-mesures (je l'ai essayé en mode JVM, mais cela peut être différent en mode natif).

Avec Doma, par contre, vous pouvez obtenir les métadonnées dont vous avez besoin en chargeant simplement une classe qui existe déjà au moment de l'exécution. De plus, le temps d'amorçage n'augmente pas même si le nombre de classes d'entité augmente car les classes sont chargées selon les besoins au lieu d'être chargées en même temps pendant l'amorçage.

Points à surveiller dans le traitement des annotations

La chose la plus importante à noter est que l'EDI nécessite des paramètres spéciaux pour activer le traitement des annotations. En outre, ce dont vous devez être conscient dépend de si vous utilisez Maven ou Gradle comme outil de construction.

J'ai écrit «Kimon» au début, mais la plupart du phénomène selon lequel Doma ne fonctionne pas semble être lié à ce paramètre.

IDE et outils de construction recommandés

Dans l'EDI, nous avons confirmé l'opération avec Eclipse et IntelliJ IEDA. Je suis complètement fan de celui qui est le meilleur, mais Eclipse doit souvent faire plus attention pour que le processus d'annotation fonctionne. Cependant, ce n'est pas un gros problème si vous comprenez bien, et comme l'exécution du traitement des annotations par compilation incrémentielle d'Eclipse est un retour plus rapide que lors de l'utilisation d'IDEA, Eclipse est utilisé simplement parce qu'il y a de nombreux points à prendre en compte. Je pense que c'est dommage de tronquer (dans IDEA, le processus d'annotation ne fonctionne que si vous le construisez explicitement, mais dans Eclipse, cela fonctionne à chaque fois que vous enregistrez le fichier, et l'erreur causée par le processus d'annotation est rapidement renvoyée au développeur. ).

L'outil de construction a été confirmé pour fonctionner avec Gradle et Maven. Vous pouvez utiliser l'un ou l'autre comme vous le souhaitez, mais je n'ai personnellement que peu de connaissances sur la combinaison d'Eclipse et de Maven. Il semble que je sois souvent accro au comportement de M2 Eclipse. Cependant, je sais que la cause est autour du fichier SQL, donc si vous n'utilisez que l'API Criteira, vous ne serez peut-être pas si dérangé.

Il est possible de l'exécuter sur Eclipse ou IEDA sans utiliser Gradle ou Maven, mais je ne le recommande pas du tout </ font>. Je suis absolument accro à divers paramètres, y compris les bibliothèques dépendantes, donc je veux vraiment que vous utilisiez Gradle ou Maven.

En résumé, ça ressemble à ça.

IDE Outil de création Explication
Eclipse Gradle Il sera décrit plus tard.
Eclipse Maven Manque de savoir-faire. Non mentionné dans cet article. À la recherche d'informations.
IDEA Gradle Vous pouvez l'importer en tant que projet Gradle.
IDEA Maven Vous pouvez l'importer en tant que projet Maven.

Points clés lors de la combinaison d'Eclipse et Gradle

Commencez par créer un projet avec Gradle. Il est important de travailler d'abord en tant que projet Gradle, pas Eclipse. Nous vous recommandons d'utiliser le projet suivant comme modèle.

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

Ce projet a une structure multi-projets Gradle. Même si celui que vous souhaitez créer ne nécessite pas de configuration multi-projets, vous pouvez conserver cette configuration multi-projets. De plus, bien que ce projet soit réalisé avec Kotlin DSL, je pense qu'il est acceptable de continuer à utiliser Kotlin DSL tel quel (ne le réécrivez pas avec Groovy DSL) compte tenu de la facilité de refactoring également. De plus, ce projet utilise Gradle Wrapper, dont je pense qu'il n'y a aucune raison de ne pas l'utiliser non plus.

La chose la plus importante dans un projet Gradle est d'utiliser un plugin Gradle appelé com.diffplug.eclipse.apt. Ce plug-in génère les paramètres d'exécution du traitement des annotations dans Eclipse. Ce plug-in accroche le projet Eclipse de Gradle, vous pouvez donc exécuter ./gradlew eclipse pour afficher les fichiers de configuration requis. Juste au cas où, toujours avec la tâche cleanEclipse Il est recommandé d'utiliser ./gradlew cleanEclipse eclipse.

Ce n'est qu'après avoir sorti le fichier de configuration ci-dessus que vous importerez le projet dans Eclipse. Étant donné qu'Eclipse ne reconnaît pas le multi-projet de Gradle, seuls les projets enfants sont importés dans Eclipse dans le cas de l'utilisation du modèle ci-dessus, mais nous reconnaissons que cela n'a pas d'importance.

En cours de développement, il peut être nécessaire de mettre à niveau la version de la bibliothèque dépendante ou de modifier les paramètres de traitement des annotations. Dans ce cas, modifiez d'abord le script de construction de Gradle au lieu de le modifier à partir d'Eclipse. Après cela, exécutez ./gradlew cleanEclipse eclipse pour re-sortir le fichier de paramètres Eclipse et actualisez le projet Eclipse (rechargez le fichier de paramètres). Il est très important que le script de construction Gradle soit toujours positif </ font>.

en conclusion

J'ai expliqué le traitement des annotations de Doma.

Récemment, j'ai ouvert une salle dédiée à Doma dans un service de chat appelé Zulip. Si vous avez des questions sur Doma, n'hésitez pas à visiter cette salle de chat.

  • https://domaframework.zulipchat.com/

Par exemple, comment décrire les paramètres de traitement des annotations dans le script de génération Gradle peut poser problème car il y a peu d'informations dans le monde, mais si vous posez une question, je peux vous donner des conseils.

Bien entendu, nous saluons également la participation de ceux qui peuvent coopérer au développement de Doma et des produits connexes de Doma et de ceux qui peuvent partager des informations.

Recommended Posts