为什么JVM省略了注释

时间:2010-01-14 07:46:05

标签: java annotations

我正在使用OSGi调试应用程序,我非常清楚地知道如果缺少Annotation类,类加载器将省略该注释,如果我调用method.getAnnotations(),没有异常,但什么都不返回。

我不明白,但我确实想知道是否有任何办法让JVM抛出异常。 是否有启动JVM的选项?

@Target({ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
@Before 
public @interface Secured { 
   /** Priority **/ public int order() default 0; 
   /** Mapping **/ public String value() default "profile/validate"; 
   /** Required **/ public boolean required() default true; 
   public String role() default "L1"; 
}

感谢。

2 个答案:

答案 0 :(得分:3)

是您在运行时保留的注释吗?就是它将@Retetntion annotation设置为RUNTIME:

@Retention(RUNTIME)
public @interface YourAnnotation

答案 1 :(得分:2)

每个注释都有一个定义的保留。保留基本上意味着,JVM应该在哪些上下文中保存注释。可以看到不同的值here。默认行为是CLASS保留策略,这意味着注释位于.class文件中,但JVM不使用。你想要的是RUNTIME,我的意思很清楚。此外,还有一个SOURCE策略,用于仅在编译期间相关的注释。

要设置保留政策,您必须使用@Retention注释注释(元元素,任何人?),您可以阅读更多有关here的内容。

Java annotation tutorial有更多相关信息。