Я думаю, что главными недостатками является то, что это сложнее. Обработка аннотаций - это совершенно новый API и концепция, о которых многие разработчики не знакомы. API Reflection проще и более известен. Обычно вы можете выполнять одни и те же задачи во время выполнения.
Если более высокая производительность запуска имеет решающее значение (что редко бывает), то, возможно, стоит добавить сложность.
Я бы не стал доверять критериям. Они заявляют, что «classpath size был установлен в 121MB» - произвольное значение, которое делает любое сравнение с жесткой кодировкой или обработкой времени компиляции совершенно бесполезным. Почему вы все равно хотите отсканировать весь путь к классу? Сканирование только классов разработчиков было бы более разумным в большинстве случаев.
Многие фреймворки используют конфигурационные файлы или имеют API для ограничения классов или пакетов, которые необходимо отсканировать. Это значительно увеличивает время запуска.
почему не существует множество библиотек, чтобы сделать это
Многие OSGi инструменты/рамки этого. Аннотации проверяются во время компиляции, а метаданные записываются в файл манифеста jar или создают более сложные файлы метаданных. Я подозреваю, что основной причиной этого является сохранение совместимости с bnd и аналогичные инструменты, которые были использованы для построения и компиляции анализа времени компонентов OSGi, прежде чем аннотации или обработка аннотаций стали более популярными. Кроме того, компонент OSGi имеет свой собственный жизненный цикл и может приходить и уходить в любое время. Таким образом, это случай, когда время запуска имеет значение немного больше, поскольку вы можете не только сканировать один раз при запуске приложения. Вам нужно будет сканировать аннотации, когда запускается компонент (повторно).
Я бы не сказал, что это хорошая или плохая практика. Используйте этот метод, если он соответствует вашим потребностям. Я бы не добавлял много сложностей ради запуска нескольких миллисекунд.
Это звучит как [преждевременная оптимизация] (http://c2.com/cgi/wiki?PrematureOptimization) для меня. Вы проводили тесты? –
ClassIndex сделал несколько интересных тестов, я сам не сделал. Это может быть преждевременная оптимизация, но вопрос остается. Думаю, это также важная проблема дизайна моей библиотеки. –
Цитата из вашей ссылки * скорость Java ** загружает загрузочные ** **, сколько раз (обычно) вы могли бы сказать, что ваши (или ваши пользователи) приложения (ов) обычно загружаются в течение одного прогона? Наконец, «плагин Reflections Maven» выглядит так же, как и почти (на этом единственном опубликованном эталоне) ... –