在JAVA中自定义的注解使用 @interface 作为修饰。
例:public @interface MyTargt{}
注解@Retention可以用来修饰注解,是注解的注解,称为元注解,
用@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
用@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
用@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
例:@Retention(RetentionPolicy.RUNTIME)
public @interface MyTargt {}
所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.
注解@Target也是用来修饰注解的元注解,它有一个属性ElementType也是枚举类型,
值为:ANNOTATION_TYPE CONSTRUCTOR FIELD LOCAL_VARIABLE METHOD PACKAGE PARAMETER TYPE
如@Target(ElementType.METHOD) 修饰的注解表示该注解只能用来修饰在方法上
例:@Target(ElementType.METHOD)
public @interface MyTargt {}
public class TestBean {
@MyTargt
public void out(){
}
}
比如spring中的bean注解,首先利用反射读取bean注解信息,而bean的功能大概便是IOC功能.