Le principe de l'annotation java
Java: Utilisez l'annotation, //www.vevb.com/article/101747.htm
Qu'est-ce que l'annotation
Les annotations sont également appelées métadonnées, telles que notre @Override commun et @deprecated. Les annotations sont une fonctionnalité introduite dans la version JDK1.5. Ils sont utilisés pour expliquer le code et peuvent annoter des packages, des classes, des interfaces, des champs, des paramètres de méthode, des variables locales, etc. Ses fonctions principales sont les suivantes:
Les annotations générales peuvent être divisées en trois catégories:
Une catégorie est les annotations standard fournies avec Java, y compris @Override, @DepreCated et @SuppressWarnings, qui sont utilisées pour indiquer qu'une certaine méthode est réécrite, une certaine classe ou méthode est obsolète et un avertissement à ignorer. Une fois ces annotations marquées, le compilateur le vérifiera.
Un type est la méta-annotation. La méta-annotation est l'annotation utilisée pour définir des annotations, y compris @retention, @target, @inherited, @Documented. @Retention est utilisé pour indiquer l'étape où l'annotation est conservée, @Target est utilisé pour indiquer la portée de l'annotation utilisée, @inherited est utilisé pour indiquer que l'annotation peut être héritée et @Documented est utilisé pour indiquer s'il faut générer un document Javadoc.
Un type est les annotations personnalisées. Vous pouvez définir des annotations en fonction de vos propres besoins et utiliser des annotations de méta pour annoter les annotations personnalisées.
Principe d'annotation:
Voyons comment soutenir les annotations sous le système Java. Revenons à l'exemple ci-dessus de l'annotation personnalisée. Pour le test d'annotation, comme suit. Si vous annotez la classe AnnotationTest, la valeur de la déclaration d'annotation peut être obtenue via annotationtest.class.getannotation (test.class) lors de l'exécution. On peut voir à partir de la phrase ci-dessus qu'elle obtient l'annotation de test de la structure de la classe, il doit donc être que l'annotation a été ajoutée à la structure de la classe à un moment donné.
@Test ("Test") Classe publique AnnotationTest {public void test () {}}Du code source Java à Bytecode de classe est effectué par le compilateur. Le compilateur analysera le code source Java et générera un fichier de classe. Les annotations sont également traitées par le compilateur au moment de la compilation. Le compilateur traitera les symboles d'annotation et les attachera à la structure de la classe. Selon la spécification JVM, la structure du fichier de classe est un format strictement ordonné. La seule façon d'attacher des informations à la structure de classe est de les enregistrer dans les attributs d'attributs de la structure de la classe. Nous savons que pour les classes, les champs et les méthodes, il existe leurs propres structures de table spécifiques dans la structure des classes, et chacune a ses propres attributs. Pour les annotations, la portée de leurs fonctions peut également être différente. Ils peuvent être utilisés sur les classes ou sur les champs ou les méthodes. À l'heure actuelle, le compilateur stockera les informations d'annotation sur les attributs de la classe, des champs et des méthodes en conséquence.
Une fois notre classe AnnotationTest compilée, une propriété RuntimeViBeLanNotations sera incluse dans le fichier annotationtest.class. Étant donné que cette annotation est appliquée à la classe, cette propriété est ajoutée à l'ensemble d'attributs de la classe. Autrement dit, la valeur de paire de valeurs de clé = Test de l'annotation de test sera enregistrée. Lorsque le JVM charge le bytecode du fichier annotationtest.class, la valeur de propriété RuntimeViBeLannotations sera enregistrée dans l'objet de classe de AnnotationTest, de sorte que l'objet d'annotation de test peut être obtenu via AnnotationTest.Class.getannotation (Test.Class), puis la valeur de la propriété est obtenue par l'objet annotation de test.
Il peut y avoir des questions ici, quel est l'objet d'annotation de test? En fait, l'essence de l'annotation après avoir été compilée est une interface qui hérite de l'interface d'annotation, donc @Test est en fait "le test d'interface publique étend l'annotation". Lorsque nous appelons via annotationtest.class.getannotation (test.class), le JDK générera un objet qui implémente l'interface de test via un proxy dynamique et définira la valeur de propriété RuntimeVibleAnNotations dans cet objet. Cet objet est un objet d'annotation de test. La valeur d'annotation peut être obtenue via sa méthode de valeur ().
L'ensemble du processus du mécanisme de mise en œuvre de l'annotation Java est illustré ci-dessus. Son implémentation nécessite la coopération du compilateur et du JVM.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!