Java 注解

注解可以理解成标签.

File
spring注解
@Documented
@Inherited
@Retention
@Target注解
Java

注解的概念

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。注解是不能继承也不能实现其他类或接口的
Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。

注解的使用

Annotation使用

@TestAnnotation
public class TargetTest<@TestAnnotation T> {
    @TestAnnotation  
    private String value;  
}

内置的注解

作用在代码的注解

元注解

作用在其他注解的注解称为元注解

自定义注解

@Documented  // @Documented表示该Annotation可以出现在 javadoc 中。  
@Target({ElementType.TYPE_USE, ElementType.METHOD})  // @Target表示该Annotation类型的注解可以用于修饰哪些程序元素  
@Retention(RetentionPolicy.RUNTIME)  // @Retention表示需要在什么级别保存该 Annotation 信息  
public @interface TestAnnotation {
	String value() default "test";
}

利用反射获取注解

必须被@Retention表示为RUNTIME的才可以在运行时通过反射获取注解

@Deprecated  
public class ReflectTest {  
    public static class Test {    }  
    public static void main(String[] args) {  
        ReflectTest test = new ReflectTest();  
        //通过反射获取子类的注解  
        System.out.println("child class Annotations" + test.getClass().getAnnotation(Deprecated.class));  
    }  
}

设置注解内字段

注解本质上是接口,因此没有真正的字段,而是用带默认值的方法作为字段。

注解内方法支持的返回类型:

注解内方法样例:

public class RetentionTest {   
    @RuntimeRetentionAnnotation(times=3)  
    public void runtimeRetentionTest() {  
        System.out.println("runtime retention");  
    }   
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {  
        RetentionTest test = new RetentionTest();  
        // 获取方法上的注解的值  
        Method method = test.getClass().getDeclaredMethod("runtimeRetentionTest");  
        RuntimeRetentionAnnotation annotation = method.getAnnotation(RuntimeRetentionAnnotation.class);  
        for(int i=0; i<method.getAnnotation(RuntimeRetentionAnnotation.class).times(); i++) {  
            method.invoke(test);  
        }  
    }  
}
// 会调用三次runtimeRetentionTest方法

注解的底层实现 #TODO

参考Java注解入门到精通,这一篇就够了-CSDN博客