Краткий ответ: вам нужно добавить @Retention (RetentionPolicy.RUNTIME) в определение аннотации.
Пояснение:
Аннотации по умолчанию не хранятся компилятором. Они просто не существуют во время выполнения. Поначалу это может показаться глупым, но есть много аннотаций, которые используются только компилятором (@Override) или различными анализаторами исходного кода (@Documentation и т. Д.).
Если вы хотите на самом деле использовать аннотацию с помощью отражения, как в вашем примере, вам нужно сообщить Java, что вы хотите, чтобы она запомнила эту аннотацию в самом файле класса. Эта заметка выглядит так:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{}
Для получения дополнительной информации ознакомьтесь с официальными документами 1 и особенно обратите внимание на бит о RetentionPolicy.