目录
@Target(ElementType.TYPE) - 注解作用于类/接口 :
声明注解
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface TableName {
/**
* 对应的名称
* @return
*/
String value() default "";
}
注解属性
@Target : 指定注解的作用范围
@Target(ElementType.TYPE) - 注解作用于类/接口 :
只能在类或者接口上使用上面定义的注解,否则就会报错
@Retention :指定注解的生命周期
RetentionPolicy.SOURCE:
注解仅存在于源码中,编译器编译后的class中不会保留(没有)该注解,
通常用于代码的检查,比如@overwrite,当父类或接口没有此方法时会编译失败;
编译器编译过后 :
查看 class文件 -> 没有该注解的信息
RetentionPolicy.CLASS:
(默认值) 注解会存在编译后的class文件中,但是JVM加载时不会保留 ( -- 反射获取注解的话就会报错,因为jvm运行时加载的时候是不会保留该注解的信息,这就是CLASS和RUNTIME两个生命周期的区别)
编译器编译过后 :
查看 class文件 -> 有该注解的信息
但是当反射获取注解的时候就会报空指针
该生命周期 : jvm加载的时候不会保留该注解的信息,所以就会报错
RetentionPolicy.RUNTIME:
注解会存在编译后的class文件中,并被JVM读取,通过反射方式可以获取注解的值
编译器编译过后 :
查看 class文件 -> 有该注解的信息
也可以运行时通过反射机制进行获取 (jvm加载类的时候会保留该注解)