Я отлаживаю приложение с помощью OSGi, я ужасно узнаю, что если класс Annotation отсутствует, загрузчик классов будет опускать эту аннотацию, если я вызову метод.getAnnotations(), исключение, но ничего не возвращать.Почему JVM опускает аннотацию
Я не понимаю, но я хочу знать, есть ли способ сделать 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";
}
Спасибо.
ДА, я использую Феликс, теперь я не уверен, что это феликс или проблема JVM. @Target ({ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) @Before общественного @interface Обеспеченные { \t/** Приоритет **/ \t общественного порядка INT() по умолчанию 0; \t/** Отображение **/ \t public String value() default "profile/validate"; \t/** Обязательно **/ \t public boolean required() default true; \t \t public String role() default "L1"; } – Brodie
покажите нам, как вы вызываете getAnnotation, и метод вызывает его. – Bozho
1, Используйте загрузчик классов класса felix, класс Class, Класс clazz = app.getClassLoader(). LoadClass (name); 2, Iterate mathods, for (Метод метода: clazz.getDeclaredMethods()) {...} 3, для каждого метода, вызов, для (запись аннотацииRefAnno: method.getAnnotations()) {...}, метод Defination является: @Entry (значение = "SayHi") @Secured (роль = "L1") общественного недействительными SayHi (Событие е) { \t logger.debug ("SayHi"); \t e.setForward ("sample1/sayHi"); } Если защищенный класс аннотации не импортируется пакетом, метод.getAnnotations() возвращает только одну аннотацию, @Entry. Я использую jdk1.6.17, felix 2.0.1, fedora 12 – Brodie