Java Annotation

什么是注解?

  Annotation(注解)是插入代码中的元数据,在JDK5.0及以后版本引入。它主要的作用有以下四方面:
  生成文档,通过代码里标识的元数据生成javadoc文档。
  编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
  编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
  运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例。

元注解:

  java.lang.annotation提供了四种元注解,专门注解其他的注解:
  @Documented –注解是否将包含在JavaDoc中
  @Retention –什么时候使用该注解
  @Target –注解用于什么地方
  @Inherited – 是否允许子类继承该注解

   @Target:表示该注解可以用于什么地方,可能的ElementType参数有:
  CONSTRUCTOR:构造器的声明
  FIELD:域声明(包括enum实例)
  LOCAL_VARIABLE:局部变量声明
  METHOD:方法声明
  PACKAGE:包声明
  PARAMETER:参数声明
  TYPE:类、接口(包括注解类型)或enum声明
  @Retention表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:
  SOURCE:注解将被编译器丢弃
  CLASS:注解在class文件中可用,但会被VM丢弃
  RUNTIME:VM将在运行期间保留注解,因此可以通过反射机制读取注解的信息

自定义注解

  首先需要创建一个注解类

package com.example.consumer.annotation;

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


/**定义注解

  *
  * */
@Target({ElementType.TYPE})
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Audit {
    String operation() default "";

    String operator() default "";
}

  获取注解上的属性

import java.lang.reflect.Method;

@Audit(operation = "Main", operator = "Main")
public class Main {

    @Audit(operation = "test", operator = "test")
    public static void test() {

    }

    public static void main(String args[]) {
        for (Method m : Main.class.getDeclaredMethods()) {
            //获得注解的对象
            Audit audit = m.getAnnotation(Audit.class);
            if (audit != null) {
                System.out.println("Found annotation:" + audit.operation() + " "
                        + audit.operator());
            }
        }

        Audit audit = Main.class.getDeclaredAnnotation(Audit.class);
        if (audit != null) {
            System.out.println("Found annotation:" + audit.operation() + " "
                    + audit.operator());
        }
    }
}

你可能感兴趣的:(Java Annotation)