В основном аннотации - это инструмент, который позволяет обрабатывать исходные файлы во время компиляции и выполнять действия, соответствующие аннотациям, найденным в файле (возможно, получение нового источника).
Ониони весьма полезны для многих целей, таких как объяснение ограничений, избегая при этом загромождения кода или обогащения поведения некоторых методов.
Я бы не сказал, что они так похожи на DSL в Ruby, поскольку в этом случае вы аннотируете код с помощьюопределенный синтаксис, в то время как в Ruby вы можете создавать свой собственный DSL с нуля и использовать его по своему усмотрению.
Java поставляет инструмент под названием apt
(такой, какой вы подозреваете), который также может работать с аннотациямиво время выполнения, но они обычно используются для предоставления информации о времени компиляции вашим источникам.Это не означает, что в определенных обстоятельствах вы не можете легко адаптировать механизм аннотации к тому же, что и с DSL, но они не существуют для той же цели.