Maison > Java > javaDidacticiel > le corps du texte

Introduction à l'utilisation des annotations d'implémentation Java

黄舟
Libérer: 2017-09-14 10:49:43
original
1490 Les gens l'ont consulté

Cet article présente principalement en détail des informations pertinentes sur la mise en œuvre et l'utilisation des annotations Java. J'espère que grâce à cet article, tout le monde pourra comprendre et maîtriser les connaissances des annotations Java. Les amis dans le besoin pourront se référer à

. Explication de Java en détail Implémentation et utilisation des annotations

Les annotations Java sont publiées dans java5. Leur fonction est de sauvegarder les fichiers de configuration et d'améliorer la lisibilité du code. C'est très courant dans divers frameworks et développements aujourd'hui, je voudrais donc l'expliquer ici.

Comment créer une annotation

Chaque annotation personnalisée se compose de quatre méta-annotations, fournies par Java lui-même :

@Target(ElementType .**)

Il s'agit d'une énumération. Le haut est l'endroit où les annotations personnalisées sont utilisées, telles que les classes, les variables, les méthodes, etc.

@Retention( RetentionPolicy.**) est utilisé pour indiquer à quel niveau l'annotation est enregistrée, par exemple lors de la compilation, dans les fichiers de classe et pendant l'exécution de la machine virtuelle

@Documented Incluez cette annotation dans javadoc , ce qui signifie. que cette annotation sera extraite dans un document par l'outil javadoc. Le contenu du document doc sera différent en fonction du contenu informatif de cette annotation

@Inherited : Après avoir défini l'annotation et l'avoir utilisée dans le code du programme, les annotations de la catégorie parent seront. être par défaut. Il ne sera pas hérité dans les sous-catégories. Vous pouvez ajouter une Annotation qualifiée par java.lang.annotation.Inherited lors de la définition des annotations, ce qui permet d'hériter du type d'Annotation que vous définissez.

Après avoir présenté la théorie, démarrez le code (parler ne coûte pas cher, montrez votre code)


package com.yasin.JavaLearn;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 这是一个类级别的注释,这个注释中有一个name字段,默认值是 yasin
 * @author yasin
 *
 */

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Learn {
  String name() default "yasin";
}
Copier après la connexion


package com.yasin.JavaLearn;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 这是一个变量级别的注解,注解中有一个字段name,默认值是field
 * @author yasin
 *
 */

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FiledLearn {
  String name() default "field";


}
Copier après la connexion


package com.yasin.JavaLearn;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 这是一个方法级别的注解
 * @author yasin
 *
 */

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MethodLearn {
  String name() default "method";

}
Copier après la connexion

J'ai défini trois annotations ci-dessus, qui sont des annotations à trois niveaux couramment utilisées pour les classes, les variables et les méthodes.

Ci-dessous, je définis une classe et j'utilise ces trois annotations


package com.yasin.JavaLearn;

@Learn
public class Yasin {

  @FiledLearn
  public int level;

  @FiledLearn(name="xq")
  public String xq;

  public String a;


  @MethodLearn(name="test")
  public void setMain(){

  }

  public void setA(){

  }

}
Copier après la connexion

Voici comment utiliser cette annotation et extraire l'annotation. Les variables et méthodes correspondantes sont obtenues par réflexion de classe, et des annotations sont obtenues à partir des variables et méthodes.


package com.yasin.JavaLearn;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;

/**
 * Hello world!
 *
 */
public class App {

  public static void main(String[] args) {

    Learn learn = Yasin.class.getAnnotation(Learn.class);
    System.out.println(learn.name());


    Field[] fields = Yasin.class.getFields();//获取该类所有的字段

    for(Field filed:fields){
      if(filed.isAnnotationPresent(FiledLearn.class)){//校验该字段是否添加这个注解
        System.out.println(filed.getName());
        FiledLearn filedLearn = filed.getAnnotation(FiledLearn.class);
        System.out.println(filedLearn.name());
      }
    }

    Method[] methods = Yasin.class.getMethods();
    for(Method method:methods){
      if(method.isAnnotationPresent(MethodLearn.class)){//校验该方法是否有这个注解
        System.out.println(method.getName());
        MethodLearn methodLearn = method.getAnnotation(MethodLearn.class);
        System.out.println(methodLearn.name());
      }

    }


  }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!