Я создал набор аннотаций JavaBean (http://code.google.com/p/javadude/wiki/Annotations)
[Примечание: я сейчас работаю над новой версией, поэтому код транка не соответствует загрузкам с сайта обновления]
Тестирование
Тестировать их можно довольно сложно ...
Обычно я подхожу к нему, создавая проект в затмении с тестовым кодом и собирая его, затем делаю копию и отключаю обработку аннотаций.
Затем я могу использовать Eclipse для сравнения «активного» тестового проекта с «ожидаемой» копией проекта.
У меня пока не так много тестов (очень сложно создавать так много комбинаций атрибутов), но это помогает.
Сборка системы
Использование аннотаций в системе сборки на самом деле очень просто. Взгляните на http://code.google.com/p/javadude/wiki/Annotations для примера того, как он используется в скрипте ant, и использование его в eclipse - это всего лишь вопрос создания плагина, задающего расширение процессора аннотаций и включающего обработку аннотаций в проектах, которые хотят используйте это.
Я использовал обработку аннотаций в среде непрерывной сборки, собирал аннотации и процессор, а затем использовал их в остальной части сборки. Это действительно довольно безболезненно.
Время обработки
Я не нашел в этом проблемы - будьте осторожны с тем, что вы делаете в процессорах. Я генерирую много кода в моем, и он работает нормально. У муравья немного медленнее.
Обратите внимание, что процессоры Java6 могут работать немного быстрее, потому что они являются частью обычного процесса компиляции. Однако у меня возникли проблемы с тем, чтобы заставить их работать должным образом с возможностью генерации кода (я думаю, что большая часть проблемы заключается в поддержке eclipse и запуске многофазных компиляций). Сейчас я придерживаюсь Java 5.
Ошибка обработки
Это одна из самых продуманных вещей в API аннотаций. В API есть объект "messenger", который обрабатывает все ошибки. Каждая IDE предоставляет реализацию, которая преобразует это в соответствующие сообщения об ошибках в нужном месте кода.
Единственное, что я делал для конкретного затмения, было приведение объекта среды обработки, чтобы я мог проверить, был ли он запущен как сборка или для согласования редактора. Если редактирую, я выхожу. В конце концов я изменю это, чтобы просто выполнять проверку ошибок во время редактирования, чтобы она могла сообщать об ошибках при вводе. Однако будьте осторожны - вам нужно, чтобы он был действительно быстрым для использования во время сверки, или редактирование стало медленным.
Генерация кода Gotcha
[добавлено немного больше за комментарии]
В спецификациях процессора аннотаций указано, что вы не можете изменять класс, содержащий аннотацию. Я подозреваю, что это должно упростить обработку (дальнейшие раунды не должны включать аннотированные классы, предотвращая также бесконечные циклы обновления)
Однако вы можете генерировать другие классы, и они рекомендуют такой подход.
Я генерирую суперкласс для всех методов get / set и всего, что мне нужно сгенерировать. У меня также есть процессор, чтобы убедиться, что аннотированный класс расширяет сгенерированный класс. Например:
@Bean(...)
public class Foo extends FooGen
Я создаю класс в том же пакете с именем аннотированного класса плюс «Gen» и проверяю, что аннотированный класс объявлен для его расширения.
Я видел, как кто-то использовал API дерева компилятора для изменения аннотированного класса - это против спецификации, и я подозреваю, что в какой-то момент он закроет эту дыру, чтобы она не работала.
Я бы порекомендовал создать суперкласс.
В целом
Я действительно счастлив, используя процессоры аннотаций. Очень хорошо спроектирован, особенно с учетом независимости сборки IDE / командной строки.
Пока что я бы порекомендовал придерживаться процессоров аннотаций Java5, если вы выполняете генерацию кода - вам нужно запустить отдельный инструмент под названием apt для их обработки, а затем выполнить компиляцию.
Обратите внимание, что API для процессоров аннотаций Java 5 и Java 6 отличается! API обработки Java 6 лучше IMHO, но мне просто не повезло с процессорами Java 6, делающими то, что мне нужно.
Когда выйдет Java 7, я сделаю новый подход к обработке еще раз.
Не стесняйтесь, напишите мне, если у вас есть вопросы. (Scott@javadude.com)
Надеюсь, это поможет!