注解与元注解:
注解:用来贴在类/方法/变量等之上的一个标记,第三方程序可以通过这个标记赋予一定功能.
元注解:在定义注解的时候用来贴在注解上的注解,用来限定注解的用法.元注解有四个:@Retention,@Target,@Documented,@Inherited
@Retention:决定注解可以保存到哪个时期,有三个都封装在枚举RententionPolicy中:
RetentionPolicy.SOURCE 表示注解只存在源文件中,不会被编译到字节码中
RetentionPolicy.CLASS 表示注解会被编译到字节码中,但是jvm不加载注解
RetentionPolicy.RUNTIME 表示注解会被编译到字节中,会随着字节码的加载而进入jvm
我们开发中自定义的注解的有效期都要使用RUNTIME,这样才能在程序运行时使用反射赋予注解功能.
@Target:决定了该注解可以贴在什么地方,都封装在枚举ElementType中,常用的如下:
ElementType.FIELD 贴在字段上(包括枚举常量)
Element.METHOD 贴在方法上
Element.TYPE 贴在类上,接口或枚举上
@Documented:表示注解会被javadoc指令编辑到api中
@Inherited:表示注解会遗传给子类
注解的定义和使用:
定义注解的语法:使用 @interface 注解名称
例如: public @interface VIP{
//抽象方法 属性
}
注解的抽象方法称为属性,如果要给属性赋予默认值可以在抽象方法后使用default值
使用注解语法:@注解名(属性名=属性值,属性名=属性值)
如果只有一个属性,并且名称叫做value的话,那么可以省略value不写
另外,属性的返回值类型只能是基本类型/枚举/Class/注解/String/以及他们各自的数组
我们还可以通过反射获取注解,从而实现自己编写权限模块的功能.