Являются ли аннотации своего рода DSL в Java? - PullRequest
4 голосов
/ 13 июля 2010

После нескольких файлов конфигурации XML я видел, как Java переходит к конфигурациям на основе аннотаций.

Аннотации играют роль DSL здесь?

Это потому, что статическая природа Java? Я думаю о Ruby, который не имеет (афаик) таких вещей. Это потому, что в Ruby есть хорошие возможности метапрограммирования?

Есть ли альтернативы (я имею в виду, кроме использования нескольких файлов .xml)

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

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

Ониони весьма полезны для многих целей, таких как объяснение ограничений, избегая при этом загромождения кода или обогащения поведения некоторых методов.

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

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

0 голосов
/ 18 августа 2010

Как уже говорилось, аннотацию можно использовать для создания DSL довольно эффективно, потому что они добавляют какие-то возможности метапрограммирования в язык. Однако для этой цели вы можете использовать инжектор байтового кода или даже любую другую функцию языка Java. Однако основная цель аннотаций состоит в том, чтобы иметь возможность аннотировать элементы исходного кода метаданными. Если вы запрашиваете альтернативы для создания внутренних DSL в Java, просто взгляните на книгу Fowler's DSL WIP и выберите из различных концепций, которые можно использовать для реализации внутренних DSL, многие из них присутствуют в Java. Если вы запрашиваете альтернативы для метапрограммирования, то их также много: разные инжекторы байт-кода, аспектно-ориентированное программирование с использованием AspectJ или Spring или генерация кода.

...