Почему JVM опускает аннотацию - PullRequest
0 голосов
/ 14 января 2010

Я отлаживаю приложение, используя 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 ]

3 голосов
/ 14 января 2010

ваша аннотация сохраняется во время выполнения? то есть аннотация @ Retetntion установлена ​​в RUNTIME:

@Retention(RUNTIME)
public @interface YourAnnotation
2 голосов
/ 14 января 2010

Для каждой аннотации определено сохранение. Сохранение в основном означает, в каких контекстах JVM должна сохранять аннотацию. Различные значения можно увидеть здесь . Поведение по умолчанию - CLASS политика хранения, что означает, что аннотации находятся в файлах .class, но не используются JVM. То, что вы хотите, это RUNTIME, смысл которого, я думаю, ясен. Кроме того, существует политика SOURCE для аннотаций, которые актуальны только во время компиляции.

Чтобы установить политику хранения, вы должны аннотировать аннотацию (метамета, кого-нибудь?), Используя @Retention, с которой вы можете прочитать больше о здесь .

Обучающее руководство по Java содержит немного больше информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...