CDI собрать все аннотированные методы - PullRequest
0 голосов
/ 06 марта 2020

Я знаю, что с помощью cdi вы можете собирать все типы (классы / интерфейсы), аннотированные определенной аннотацией (путем наблюдения ProcessAnnotatedType). Однако я хотел бы собрать все методы, помеченные определенной аннотацией. Это возможно с чистым CDI? У меня есть пример, который делает это с помощью библиотеки Reflections (org.reflections), но я хотел бы сделать это с помощью cdi, если это возможно. Кто-нибудь знает как это сделать? Спасибо, Коннор

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Нет, вы не можете сделать это с чистым CDI, вы должны использовать другие средства.

То, что вы пытаетесь сделать, выходит за рамки CDI. Ваша оригинальная идея с расширением CDI хороша, однако она не сработает для всех методов, которые вам нужны. Он предназначен для подключения к процессу CDI bootstrap и его изменения / обогащения. Не вмешиваться во все классы в развертывании.

Было бы лучше использовать те, которые сосредоточены на проверке всех классов в развертывании. Мне приходит в голову Jandex , поиск очень быстрый, когда вы строите индекс.

0 голосов
/ 09 марта 2020

На самом деле, метод наблюдателя, подобный этому:

private final <T> void typeFound(@Observes
                                 @WithAnnotations(MyMethodAnnotation.class)
                                 final ProcessAnnotatedType<T> event) {

}

будет запущен для любого типа, который обнаружен CDI и имеет @MyMethodAnnotation подарок где-нибудь внутри него .

Часть «обнаружена CDI» означает, что рассматриваемый тип должен быть обнаруживаем в первую очередь. Обычно это происходит, когда вы помещаете определяющую bean-аннотацию на тип.

(я говорю "нормально", потому что режим обнаружения компонента annotated это значение по умолчанию и, вероятно, самое распространенное "в дикой природе". Есть другие .)

Тогда вы можете получить доступ ко всем AnnotatedMethod с объект AnnotatedType , достижимый из объекта AnnotatedType, достижимый из события ProcessAnnotatedType.

...