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

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

黄舟
黄舟original
2017-09-14 10:49:431540parcourir

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";
}


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";


}


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";

}

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(){

  }

}

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());
      }

    }


  }
}

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!

Déclaration:
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