Que sont les annotations ?
Les annotations sont également appelées métadonnées, comme notre commun @Override et @Deprecated. Les annotations sont une fonctionnalité introduite dans la version JDK1.5. Elles sont utilisées pour expliquer le code et peuvent. package , classes, interfaces, champs, paramètres de méthode, variables locales, etc. sont annotés. Ses principales fonctions sont les suivantes :
Générer des documents, et générer des documents javadoc grâce aux métadonnées identifiées dans le code.
Le contrôle de compilation permet au compilateur de vérifier et de vérifier lors de la compilation via les métadonnées identifiées dans le code.
Traitement dynamique au moment de la compilation. Traitement dynamique au moment de la compilation via les métadonnées identifiées dans le code, telles que la génération dynamique de code.
Traitement dynamique au moment de l'exécution. Traitement dynamique au moment de l'exécution via des métadonnées identifiées dans le code, comme l'utilisation de la réflexion pour injecter des instances.
Les annotations générales peuvent être divisées en trois catégories :
La première catégorie concerne les annotations standard fournies avec Java, notamment @Override, @Deprecated et @SuppressWarnings, qui sont utilisées pour indiquer le remplacement d'un méthode, respectivement. Marquez une classe ou une méthode comme obsolète et marquez les avertissements à ignorer. Le compilateur les vérifiera après les avoir marqués avec ces annotations.
La première catégorie est celle des méta-annotations. Les méta-annotations sont des annotations utilisées pour définir des annotations, notamment @Retention, @Target, @Inherited, @Documented, @Retention est utilisé pour indiquer l'étape à laquelle les annotations sont conservées, @ Target est utilisé pour indiquer la portée d'utilisation des annotations, @Inherited est utilisé pour indiquer que les annotations peuvent être héritées et @Documented est utilisé pour indiquer s'il faut générer des documents javadoc.
La première catégorie concerne les annotations personnalisées. Vous pouvez définir des annotations en fonction de vos propres besoins et utiliser des méta-annotations pour annoter des annotations personnalisées.
Principe d'annotation :
Regardez comment les annotations sont prises en charge sous le système Java. Revenons à l'exemple d'annotation personnalisée ci-dessus. Pour le test d'annotation, comme suit, si la classe AnnotationTest est annotée, la valeur de la déclaration d'annotation peut être obtenue au moment de l'exécution via AnnotationTest.class.getAnnotation(Test.class). Dans la phrase ci-dessus, vous pouvez voir qu'il obtient l'annotation Test de la structure de classe, donc l'annotation doit avoir été ajoutée à la structure de classe à un moment donné.
@Test("test") public class AnnotationTest { public void test(){ } }
Du code source Java au bytecode de classe est complété par le compilateur. Le compilateur analysera le code source Java et générera des fichiers de classe, et les annotations seront également traitées par le compilateur lors de la compilation. traiter les symboles d'annotation et les ajouter à la structure de classe. Selon la spécification JVM, la structure du fichier de classe est dans un format strictement ordonné. La seule façon d'ajouter des informations à la structure de classe est de les enregistrer dans l'attribut d'attributs de la classe. structure. Nous savons que les classes, les champs et les méthodes ont leurs propres structures de tables spécifiques dans la structure de classe, et chacune a ses propres attributs. Quant aux annotations, leur champ d'action peut également être différent. Elles peuvent agir sur des classes ou sur un champ. ou méthode, le compilateur stockera les informations d'annotation dans les propriétés de la classe, du champ ou de la méthode.
Une fois notre classe AnnotationTest compilée, le fichier AnnotationTest.class correspondant contiendra un attribut RuntimeVisibleAnnotations Puisque cette annotation est appliquée à la classe, cet attribut est ajouté à l'ensemble d'attributs de la classe. Autrement dit, la paire clé-valeur value=test de l'annotation Test sera enregistrée. Lorsque la JVM charge le bytecode du fichier AnnotationTest.class, elle enregistre la valeur de l'attribut RuntimeVisibleAnnotations dans l'objet Class d'AnnotationTest, afin que l'objet d'annotation Test puisse être obtenu via AnnotationTest.class.getAnnotation(Test.class), puis via L'objet d'annotation Test obtient les valeurs d'attribut dans Test.
Vous avez peut-être des questions ici, qu'est-ce que l'objet d'annotation Test ? En fait, l'essence de l'annotation compilée est une interface qui hérite de l'interface Annotation, donc @Test est en fait "l'interface publique Test étend l'Annotation". Lorsque nous l'appelons via AnnotationTest.class.getAnnotation(Test.class), le JDK le fera. générer via un proxy dynamique Un objet qui implémente l'interface Test et définit la valeur de l'attribut RuntimeVisibleAnnotations dans cet objet. Cet objet est l'objet d'annotation Test, et la valeur d'annotation peut être obtenue via sa méthode value().
L'ensemble du processus de mise en œuvre du mécanisme d'annotation Java est comme indiqué ci-dessus. Sa mise en œuvre nécessite la coopération du compilateur et de la JVM.
Merci d'avoir lu, j'espère que cela pourra vous aider, merci pour votre soutien à ce site !
Pour plus d'articles sur Java sur ce que sont les annotations et leurs principes, veuillez faire attention au site Web PHP chinois !