Как динамически генерировать код с аннотациями во время сборки в Java?

Я ищу решение для генерации кода. Я гуглил, искал в SO и некоторых блогах, но я не нашел хорошего решения.

Я хотел бы поместить аннотацию в свой класс, и во время компиляции некоторые методы и свойства будут автоматически добавлены в класс.

ключевые моменты решения, которое я ищу:

  • сгенерированный код настраиваемый (обязательный)
  • нет внешнего инструмента, как apt должны быть вызваны (Обязательно)
  • только JDK, без сторонних фреймворков (обязательно дополнительно)
  • имя аннотации настраиваемый (необязательно)

например :

@Aliasable
public class MyClass {
//Some properties

// Contructor ...

// Some methods
}

мой класс будет выглядеть после компиляции :

public class MyClass {
   //Some properties
   private String alias;

   // Contructor ...

   // Some methods
   public String getAlias() {
      return alias;
   }

   public void setAlias(String alias) {
      this.alias=alias;
   }
}

EDIT:
Наконец, я превратил свое третье требование из обязательного в необязательное и выбрал проект Lombok (легкая интеграция с Maven и Eclipse, практически никакой работы для его использования).

3 ответов


посмотреть Проект Lombok. Он генерирует код, как вы спрашиваете, когда пишете:

public class MyClass {
  @Getter @Setter private String alias;
}

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


на инструмент обработки аннотации был интегрирован в и javac начиная с версии 1.6 и часть JDK. Таким образом, нет необходимости во внешних инструментах при использовании подключаемый API аннотаций. Вы можете создать любой код, проанализировав пользовательские аннотации или объявления метода/параметра/поля/класса с помощью зеркальный API.

вы не можете/не должны изменять существующие классы. Методы расширения могут быть генерируется путем создания подклассов.


Я использую XML и XSLT для генерации кода. Он используется для EJB, логики и CRUD-части представлений. Он не gerated во время выполнения, а вместо этого на buildserver. Разработчики могут генерировать код вручную для целей разработки скважин. Это делается с помощью той же команды, которую ANT использует на buildserver.

потому что поколение с XML и XSLT это очень настраиваемый.

Если вы google Java code generation with XSLT вы столкнетесь с большим количеством примеров. Обратите внимание, что этот метод датируется ~2000 и, таким образом, вероятно, уже предшествовали более простые решения.