S'il n'y a pas de méthodes et de tâches pour lire les annotations, les annotations ne seront pas plus utiles que les annotations. Une partie importante du processus d'utilisation des annotations est créée à l'aide du processeur d'annotation. Javase5 étend l'API du mécanisme de réflexion pour aider les programmeurs à construire rapidement des processeurs d'annotation personnalisés.
Bibliothèque de classe de processeurs annotées (java.lang.reflect.annoteatedElement):
Java utilise l'interface d'annotation pour représenter l'annotation devant l'élément de programme, qui est l'interface parent de tous les types d'annotation. De plus, Java a ajouté une interface AnnotateDelement sous le package java.lang.reflect. Cette interface représente des éléments de programme qui peuvent accepter des annotations dans le programme. L'interface a principalement les classes d'implémentation suivantes:
Classe: Définition de classe
Constructeur: Définition du constructeur
Champ: Définition variable de membre cumulé
Méthode: Méthode Définition de la classe
Package: Package Définition de la classe
Le package java.lang.reflect contient principalement des classes d'outils qui implémentent les fonctions de réflexion. En fait, toutes les API de réflexion fournies par le package java.lang.reflect étendent la possibilité de lire les informations d'annotation d'exécution. Lorsqu'un type d'annotation est défini comme une annotation lors de l'exécution, l'annotation ne peut être visible qu'à l'exécution, et l'annotation enregistrée dans le fichier de classe lorsque le fichier de classe est chargé sera lue par la machine virtuelle.
L'interface AnnotateDelement est l'interface parent de tous les éléments du programme (classe, méthode et constructeur). Par conséquent, après que le programme ait obtenu l'objet AnnotateDelement d'une certaine classe par la réflexion, le programme peut appeler les quatre méthodes suivantes de l'objet pour accéder aux informations d'annotation:
Méthode 1: <TexttendAnnotation> TGetAnnotation (Class <T> AnnotationClass): Renvoie une annotation du type spécifié qui existe sur l'élément de programme. Si l'annotation du type n'existe pas, retournez null.
Méthode 2: Annotation [] getAnnotations (): Renvoie toutes les annotations qui existent sur l'élément de programme.
Méthode 3: BooleanisannotationPresent (classe <? ExtendSannotation> AnnotationClass): détermine si l'élément de programme contient des annotations du type spécifié. S'il existe, il reviendra vrai, sinon il reviendra faux.
Méthode 4: Annotation [] GetDeclaredAnnotations (): Renvoie tous les commentaires qui existent directement sur cet élément. Contrairement à d'autres méthodes de cette interface, cette méthode ignore les annotations héréditaires. (Si aucun commentaire n'existe directement sur cet élément, un tableau de longueur zéro est retourné.) L'appelant de la méthode peut modifier le tableau renvoyé à volonté; Cela n'aura aucun effet sur le tableau renvoyé par d'autres appelants.
Un processeur d'annotation simple:
/ ***************. * / @ Target (elementType.field) @retention (RetensionPolicy.runtime) @DocumedPublic @Interface FruitColor {/ ** * Color Enum * @author peida * * / public Enum Color {bule, rouge, vert} @Author Peida * * / @ Target (elementType.field) @retention (RetenderPolicy.Runtime) @DocumentEdPublic @Interface FruitProvider {/ ** * Numéro de fournisseur * @return * / public int id () Default -1; / ** * Nom du fournisseur * @return * / public String Name () Default ""; / ** * Adresse du fournisseur * @rernurn * / public String Name () Default ""; / ** Adresse du fournisseur * "";} / *********. 89, Yan'an Road, Xi'an City, Shaanxi Province ") String privé Appleprovider; public void setAppleColor (String AppleColor) {this.appleColor = AppleColor;} public String GetAppleColor () {return AppleColor;} public Void SetApplename (String Apptename) {this.ApplenNEn) getAppleName() {return appleName;}public void setAppleProvider(String appleProvider) {this.appleProvider = appleProvider;}public String getAppleProvider() {return appleProvider;}public void displayName(){System.out.println("The name of the fruit is: apple");}}/******************Annotation Processeur *************************** / classe publique FruitInfoutil {public static void getFruitInfo (class <?> Clazz) {String strfruitname = "Fruit Name:"; String strfruitcolor = "Fruit Color:"; String StrfruitProvicer = "Fournisse Information:" Field [] fields = Clazz.getDeclaredFields (); : fields) {if (field.isannotationpresent (fruitName.class)) {fruitName fruitName = (fruitName) field.getAntannotation (fruitName.class); strfruitname = strfruitname + fruitname.value (); system.out.println (strfruitname);} else if (field.isannotationpresent (fruitColor.class)) {fruitColor fruckorcolor = (fruitColor) field.getannotation (fruitColor.class); strfruitcolor = strfruitcolor + fruitColor if (field.isannotationpresent (fructificatrider.class)) {fruitProvider fructiderprovider = (fruitprovider) field.getAnnotation (fruitprovider.class); strfruitprovicer = "Numéro de fournisseur:" + fruitprovider.id () + "nom du fournisseur:" + fruitprovider.name () + "fournisseur adressé:" "+ FruitProvider.Address (); System.out.println (strFruitProvicer);}}}} / *************** Résultat de sortie **************************** / Classe publique FruitRun {/ ** * @param args * / public Static Void Main (String [] args) {FruitInfoUtil.getFruitInfo(Apple.class);}}======================================================= Fruit name: Apple Fruit color: RED Supplier number: 1 Supplier name: Shaanxi Hongfuji Group Supplier address: Bâtiment Hongfuji, n ° 89, route Yan'an, City Xi'an, province de ShaanxiJ'ai essentiellement lu les points de connaissance de base des annotations Java (voir la carte ci-dessous). Dans le prochain article, nous concevons un cadre ORM simple basé sur des annotations pour appliquer et approfondir de manière approfondie la compréhension et l'application de divers points de connaissance des annotations.
Résumer
Ce qui précède concerne les exemples simples du processeur d'annotation Java dans cet article, j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!