自定义注解介绍
注解又称标注,是java1.5的新特新
可以对类、构造器、方法、成员变量、参数等等进行标注。
比如:当一个方法参数被标记之后,
自定义注解的书写格式
public @interface 注解名称 {
public 属性类型 属性名() default 默认值 ;
}
自定注解的特殊属性名vlue
在自定义注解中,有一个特殊的属性名:vlue
1.当有且仅有一个名字叫vlue的属性,且其他属性都自带默认值时,在标记时如果只需要给名为vlue的属性赋值,那么可以省略名称不写
如
在使用时直接写@MyAnnotation("abc")相当于@MyAnnotation(vlue="abc")
元注解
常用的元注解有两个,用来加载注解类上面,标明该注解的使用位置和生命周期
- @Target: 约束自定义注解只能在哪些地方使用
- @Retention:申明注解的生命周期
@Target常用值如下
- TYPE,类,接口
- FIELD, 成员变量
- METHOD, 成员方法
- PARAMETER, 方法参数
- CONSTRUCTOR, 构造器
- LOCAL_VARIABLE, 局部变量
@Retention常用值
- SOURCE: 注解只作用在源码阶段,生成的字节码文件中不存在
- CLASS: 注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值.
- RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用)
具体使用原理
一般自定义注解是结合springboot的AOP来进行使用的
所有的注解都是一个叫Annotation类的对象,该类实现了AnnotatedElement方法接口,这是一个有解析注解方法的接口
所有的类成分Class, Method , Field , Constructor,都实现了AnnotatedElement接口他们都拥有解析注解的能力
常用API
- Annotation[] getDeclaredAnnotations() //获得当前对象上所有的注解对象并放在注解数组中,返回注解数组。
- Annotation getDeclaredAnnotation(Annotation.Class) //获得当前对象上指定注解类型的注解对象
- boolean isAnnotationPresent(Annotation.Class) //判断当前类上有没有使用该类型注解
解析注解的技巧
注解在哪个成分上,我们就先拿哪个成分对象。
比如注解作用成员方法,则要获得该成员方法对应的Method对象,再来拿上面的注解
比如注解作用在类上,则要该类的Class对象,再来拿上面的注解
比如注解作用在成员变量上,则要获得该成员变量对应的Field对象,再来拿上面的注解