Java注解的处理方式
1:注解的retention通过retention,配合java.lang.annotation.RetentionPolicy,可以设置注解的生效范围,源码如下:// 注解的保留策略。通过枚举对象描述了保留注解信息的不同此策略。这些枚举和java.lang.annotation.Retention元注解配合使用,// 来指定注解保留多长时间public enum RetentionPolicy
·
1:注解的retention
通过retention,配合java.lang.annotation.RetentionPolicy
,可以设置注解的生效范围,源码如下:
// 注解的保留策略。通过枚举对象描述了保留注解信息的不同此策略。这些枚举和java.lang.annotation.Retention元注解配合使用,来指定注解保留到哪个阶段
public enum RetentionPolicy {
// 只在源代码中有注解信息,编译器编译后会丢弃注解信息
SOURCE,
// 编译器编译源代码后,会将注解信息保留在字节码中,但是JVM加载字节码后,会删除这些
// 注解信息,即运行时无法获取注解信息,这也是注解保留的默认策略,这种方式可以通过注解处理器
// javax.annotation.processing.Processor获取注解信息(SPI机制注册,javac识别处理)
CLASS,
// 编译器编译而成的字节码有该注解信息,JVM类加载器加载到JVM中后也有该注解信息,
// 因此可以在运行时通过反射机制来获取注解信息
RUNTIME
}
2:运行时获取注解信息
2.1:定义注解
@Retention(RetentionPolicy.RUNTIME) // 保留到运行时
@Target(ElementType.METHOD) // 用在方法上
@Documented // 通过JavaDoc生成文档
public @interface Get {
String value() default "";
}
2.2:定义使用注解的类
public class AnnotationTest {
@Get(value = "http://ip.taobao.com/59.108.54.37")
public String getIpMsg() {
return "";
}
@Get(value = "http://ip.taobao.com/")
public String getIp() {
return "";
}
}
2.3:测试获取注解
public class AnnotationProcessor {
public static void main(String[] args) {
Method[] methods = AnnotationTest.class.getDeclaredMethods();
for (Method m : methods) {
Get get = m.getAnnotation(Get.class);
System.out.println(get.value());
}
}
}
运行:
http://ip.taobao.com/
http://ip.taobao.com/59.108.54.37
3:编译时获取注解
暂略
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)