Сканирование аннотаций Java во времени выполнения

242
задан Andrew Tobilko 18 September 2016 в 05:43
поделиться

7 ответов

Используйте org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider

API

Поставщик компонентов, который сканирует путь к классам из базового пакета. Затем он применяет фильтры exclude и include к полученным классам для поиска кандидатов.

ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(<DO_YOU_WANT_TO_USE_DEFALT_FILTER>);

scanner.addIncludeFilter(new AnnotationTypeFilter(<TYPE_YOUR_ANNOTATION_HERE>.class));

for (BeanDefinition bd : scanner.findCandidateComponents(<TYPE_YOUR_BASE_PACKAGE_HERE>))
    System.out.println(bd.getBeanClassName());
203
ответ дан 23 November 2019 в 03:12
поделиться

Немного offtopic, но Spring также делает что-то подобное, с помощью < context:component-сканирование> , из которого Вы могли, возможно, изучить исходный код?

Spring обеспечивает возможность автоматического обнаружения 'стереотипных' классов [...]. Автоматически обнаружить эти классы и зарегистрировать соответствующие бобы требуют включения [элемент context:component-сканирования].

2
ответ дан toolkit 4 November 2019 в 02:53
поделиться

Я не уверен, поможет ли это Вам или нет, но Вы могли бы изучить апачский проект открытия свободного городского населения.

проект

открытия
2
ответ дан Ian McLaird 23 November 2019 в 03:12
поделиться

API Classloader не имеет "перечислить" метода, потому что загрузка класса является действием "по запросу" - у Вас обычно есть тысячи классов в Вашем пути к классу, только часть которого когда-либо будет необходима (rt.jar один составляют 48 МБ в наше время!).

Так, даже если бы Вы могли , перечисляют все классы, это было бы время очень - и потребление памяти.

простой подход должен перечислить соответствующие классы в файле настройки (xml или безотносительно исков Ваше воображение); если Вы хотите сделать это автоматически, ограничьте себя одним JAR или одним каталогом класса.

2
ответ дан mfx 23 November 2019 в 03:12
поделиться

Попробуйте Scannotation.

Это может использоваться для поиска пути к классу или каталога lib веб-приложения для определенных аннотаций.

6
ответ дан Wolf 23 November 2019 в 03:12
поделиться

Вы можете использовать http://code.google.com/p/annovention/

5
ответ дан 23 November 2019 в 03:12
поделиться

И еще одно решение - Отражения Google .

Краткий обзор:

  • Решение Spring - лучший вариант, если вы используете Spring. В противном случае это большая зависимость.
  • Использование ASM напрямую немного обременительно.
  • Использование Java Assist напрямую тоже неудобно.
  • Annovention очень легкий и удобный. Интеграции с maven пока нет.
  • Отражения Google тянут в коллекциях Google. Все индексирует, а затем очень быстро.
142
ответ дан 23 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: