Я думаю, что основные недостатки в том, что это сложнее. Обработка аннотаций — это совершенно новый API и концепция, с которой многие разработчики не знакомы. API Reflection проще и более известен. Обычно вы можете выполнять те же задачи во время выполнения.
Если более высокая производительность при запуске имеет решающее значение (что случается редко), то, возможно, стоит добавить сложности.
Хотя я бы не стал доверять тестам. Они заявляют, что «размер пути к классам был установлен на 121 МБ» - произвольное значение, которое делает любое сравнение с жестко запрограммированным или компилируемым временем обработки совершенно бесполезным. Зачем вам все равно сканировать весь путь к классу? Сканирование только классов разработчиков было бы более разумным в большинстве случаев.
Многие платформы используют файлы конфигурации или имеют API для ограничения классов или пакетов, которые необходимо сканировать. Это значительно увеличивает время запуска.
почему не так много библиотек для этого
Многие инструменты/фреймворки OSGi делают это. Аннотации сканируются во время компиляции, а метаданные записываются в файл манифеста jar или создаются более сложные файлы метаданных. Я подозреваю, что основная причина этого заключается в том, чтобы сохранить совместимость с bnd и подобными инструментами, которые использовались для построения и анализа времени компиляции компонентов OSGi до того, как аннотации или обработка аннотаций стали более популярными. Кроме того, компонент OSGi имеет свой собственный жизненный цикл и может появляться и исчезать в любое время. Так что это случай, когда время запуска имеет большее значение, поскольку вы не можете сканировать только один раз при запуске приложения. Вам нужно будет сканировать аннотации всякий раз, когда компонент (повторно) запускается.
Я бы не сказал, что это хорошая или плохая практика. Используйте эту технику, когда она соответствует вашим потребностям. Я бы не стал слишком усложнять ради времени запуска в несколько миллисекунд.
person
kapex
schedule
25.01.2015
META-INF/services/javax.annotation.processing.Processor
?? - person Paolo Dragone   schedule 24.01.2015META-INF/services/javax.annotation.processing.Processor
в свою библиотеку, процессор будет включен, если только клиент не отключит его намеренно, верно? Но если он намеренно отключит его, почему он (она) все равно должен использовать мою библиотеку. - person Paolo Dragone   schedule 24.01.2015