Java 注解 Annotation

Java 注解 Annotation

1. 理解

​ 注解是一个标志,传递一些信息.

本身没有特定的功能.就像公路上的路标,告诉一些地方,方向信息.它并不会影响你驾驶.你也可以不管它,继续走属于自己的路.然而注解可以传递信息,让你思考,决定路怎么走.

2. 基础

​ 注解你可以理解为类

package annotation;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)//解释如下源码
@Target(ElementType.METHOD)//解释如下源码
@Documented//要生成Javadoc就加吧
//固定基本写结构
public @interface MyAnnotation {
    int id() default -1;//属性
    String name() default "";
}

@Retention 生存周期

public enum RetentionPolicy {
    //编译时就不存在
    SOURCE,
	//编译时就存在,运行时不存在
    CLASS,
	//运行时存在,一般使用的情况
    RUNTIME
}

@Target 注解使用范围,可以存在多个
@Target({ElementType.TYPE,ElementType.METHOD}) //可以标注类和方法

public enum ElementType {
    /** 类用 Class, interface (including annotation type), or enum declaration */
    TYPE,
    /** 属性 Field declaration (includes enum constants) */
    FIELD,
    /** 方法 Method declaration */
    METHOD,
    /** 参数 Formal parameter declaration */
    PARAMETER,
    /** 构造器 Constructor declaration */
    CONSTRUCTOR,
    /** 内部参数 Local variable declaration */
    LOCAL_VARIABLE,
    /** Annotation type declaration */
    ANNOTATION_TYPE,
    /** Package declaration */
    PACKAGE,
    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,
    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}
3. 使用

使用反射知道注解的信息

package annotation;

import java.lang.reflect.Method;

public class Model {
    @MyAnnotation(id = 1, name = "xlroce")
    public void sayHello(){
        System.out.println("hello");
    }


    public static void main(String[] args) {
        try {
            Method methods[] = Model.class.getMethods();
            for (Method method : methods) {
                if( method.isAnnotationPresent(MyAnnotation.class)) {
                    MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
                    System.out.println(myAnnotation.id());
                    System.out.println(myAnnotation.name());
                }
            }
        } catch (Exception e){
            e.printStackTrace();
        }

    }
}

输出结果:
1
xlroce

你可能感兴趣的:(反射,java,注解,java,annotaion,反射)