`

java注解

 
阅读更多
java注解目前使用非常广泛,spring等框架都支持注解配置。其中注解Annotation的作用也比较明显:
1、可以生成文档;
2、可以简化配置;
3,在编译期间检查代码格式,如@override。

java定义注解是使用@interface声明,其中两个最主要的参数是@Retention(RetentionPolicy.RUNTIME)和

@Target(ElementType.TYPE)。Retention参数表示注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS  ;它有三种取值(代表三个阶段):  RetentionPolicy.SOURCE:保留注解到java源文件阶段,例如Override、SuppressWarnings  ,RetentionPolicy.CLASS:保留注解到class文件阶段, RetentionPolicy.RUNTIME:保留注解到运行时阶段即内存中的字节码,可以反射性地读取注解里的信息,可通过以下代码验证:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ExportFormat {
      Class<?> className();
}

@ExportFormat(className=SettlePathExportFormat.class)
public class SettlePathDto {
     public static void main(String[] args) throws Exception {
          SettlePathDto dto = new SettlePathDto();
          Class clazz = dto.getClass(); 
          ExportFormat a = (ExportFormat)clazz.getAnnotation(ExportFormat.class); 
          System.out.println(a.className());
      }
}

运行以上代码,发现只有RetentionPolicy.RUNTIME时,才能正常运行,否则都会报空指针,因为main是在jvm运行时去读取注解里的信息。

@Target(ElementType.TYPE):表示注解的作用域,有TYPE(类级别)、FIELD(字段)、METHOD(方法)等。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics