深入使用Java 注解完成权限验证
概述
Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。
注解在Java中也被定义为一种类型;使用关键字@interface
进行定义,定义的格式与interface
基本相同
如何定义与使用注解
定义一个MyAnnotation
注解;并将注解定义运行时有效;可以在函数上使用。
//定义一个注解类型MyAnnotation
@Target({
ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
}
下面使用在自定义类上使用这个注解;使用示例如下:
public class MyClass{
@MyAnnotation
public void setA(){
}
}
元注解
在上例中定义了一个注解 MyAnnotation
;在定义注解时使用了@Retention
@Target
两个注解进行了声明;这两个注解在Java中称作为元注解
;
@Retention
@Retention
元注解的作用是指示自定义注解保留的策略;策略分为源码
字节码
运行时
;策略使用RetentionPolicy
枚举类型标示分别对应为SOURCE
CLASS
RUNTIME
。
SOURCE
通常用于编译阶段,在编译时有效 ,不会将信息写入字节码中;在运行时无法获取CLASS
策略长于SOURCE
;会存在于字节码文件中,这也是Java默认的保留策略RUNTIME
策略在运行时可见;在自定义注解中使用较多的一种注解策略类型
@Target
@Target
标示了注解可以在类型的那些地方使用,使用ElementType
类型进行定义
Type
标示作用于类、接口、抽象类、枚举、注解等FIELD
标示作用于对象类型中定义的字段METHOD
标示作用于对象类型中定义的非构造函数PARAMETER
标示作用于函数的参数CONSTRUCTOR
标示作用于对象类型定义的构造函数上LOCAL_VARIABLE
标示作用于局部变量PACKAGE
标示作用于包TYPE_PARAMETER
标示作用于泛型 1.8加入ANNOTATION_TYPE
标示用于注解类型TYPE_USE
标示作用于一个类型 1.8加入
在自定义注解中需要让注解能同时作用于函数、类型、字段时可以使用数组的形式;使用{}
进行属性的赋值;示例如下
@Target({
ElementType.METHOD,ElementType.FIELD,ElementType.METHD})
public @interface MyAnnotation{
}
@Inherited
@Inherited
的作用是让注解能够在继承的类之间向下传递;例如在A
上声明了MyAnnotation
自定义的注解;B
继承自