前置
java中的注解底层仍然是接口且默认继承了Annotation接口
但它和接口不同的是,我们可以给注解里的方法赋值
以下代码经常能够遇到
public @interface MyAnnotation{
String value();
}
@MyAnnotation(value="xxxx")
puiblic class Example{
}
我们可以观察到我们在给注解的方法赋值,看起来就很神奇。
自定义注解使用流程
定义注解-使用注解-反射读取注解
定义注解
@Retention(注解的保留策略)
因为我们需要反射读取注解,而注解本身具有一个保留策略,这个保留策略是通过元注解(元数据)来实现的,也就是我们经常能够在自定义注解中能够看到的@Retention元注解,其中保留策略分为三种:
- SOURCE(只保留到源代码层,意味着当我们是这个保留策略时,无法通过反射读取注解,一般不会使用)
- CLASS(保留到字节码,可以通过反射获取,但因为是保留在了字节码中,也就是运行时不会被jvm加载,也就是说如果我们希望这个注解在编译阶段工作,就可以定义到这个级别的保留层略)
- RUNTIME(运行时,这是我们最常用的注解了,因为我们用注解往往是需要做一些判断和处理,所以我们就需要在运行时获取注解信息,因此这个级别是我们最常用的级别了)
暂时写到这里,后续下周更新。