一. 使用注解

1. 含义

        注解是放在类,方法,字段,参数前的一种特殊“注释”,是一种用作标注的“元数据”。

2. 三类注解

        1)由编译器使用的注解,不会编译进.class文件,编译后扔掉;如:@Override、@SuppressWarnings。

        2)由工具处理.class文件使用的注解,编译进.class文件,加载结束后不会加载进JVM,被底层库使用,无需处理。

        3)程序运行期读取的注解,加载后一直存在于JVM中,最常用的注解。

3. 注意

        1)注解配置参数必须都是常量,所以定义注解时就确定了所有参数的值,正常每个参数都有默认值,如果不设置就使用默认值。

        2)如果参数名称是value且只有一个参数,那么可以省略参数名称。

二. 定义注解

1. 含义

        用@interface来定义注解,注解的参数类似无参方法,用default设定一个默认值(最好是!),最常用的参数应命名为value(有且只有它时可以省略参数名称)。

2. 元注解(修饰其他注解)

        1)@Target(最常用)

                定义源码被应用于哪些位置。

                ElementType.TYPE:类或接口或枚举

                ElementType.FIELD:成员变量字段

                ElementType.METHOD:方法

                ElementType.CONSTRUCTOR:构造方法

                ElementType.PARAMETER:方法参数

                ElementType.LOCAL_VARIABLE:能修饰局部变量

                ElementType.ANNOTATION_TYPE:能修饰注解

                ElementType.PACKAGE:能修饰包

        2)@Retention(默认CLASS期间)

                定义了注解的生命周期

                RetentionPolicy.SOURCE:编译期间

                RetentionPolicy.CLASS:class文件

                RetentionPolicy.RUNTIME:程序运行时(自定义常用!)

        3)@Documented

                是否将注解信息添加到javadoc文档中。

        4)@Repeatable(注解可重复,不常用)

                修饰的注解,可在同位置使用多个同样的注解。

        5)@Inherited(继承)

                修饰的注解,仅针对@Target(ElementType.TYPE)类型的类有效,子类可继承父类的注解。

3. 如何定义注解

        1)使用@interface定义注解类。

        2)添加参数、默认值;把最常用的参数定义为value(),所有参数都尽量设置默认值。

        3)添加元注解;必须设置@Targer和@Retention,@Retention一般设置为RUNTIME。

        

Java注解形式統一抽取入參 java获取注解标注的方法_Java注解形式統一抽取入參

三. 处理注解

1. 注意

        1)所有注解都是class,都继承自java.lang.annotation.Annotation。

        2)读取注解,要使用反射,反射API提供的Annotation实例封装了注解的所有信息。

2. 获取注解

        1)判断某个注解是否存在于Class、Field、Method或Constructor。

                Class.isAnnotationPresent(注解.Class)

                Field.isAnnotationPresent(注解.Class)

                Method.isAnnotationPresent(注解.Class)

                Constructor.isAnnotationPresent(注解.Class)

        2)用反射API获取注解

                Class.getAnnotation(注解.Class)

                Field.getAnnotation(注解.Class)

                Method.getAnnotation(注解.Class)

                Constructor.getAnnotation(注解.Class)

                

Java注解形式統一抽取入參 java获取注解标注的方法_Java注解形式統一抽取入參_02

3. 使用注解

        定义了注解,本身对逻辑程序没有任何影响,编写代码来使用注解,JVM不会自动给注解添加任何处理逻辑。