Подтвердить что ты не робот

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

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

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

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

  • Сгенерированный код настраиваемый (ОБЯЗАТЕЛЬНЫЙ)
  • Не нужно вызывать внешний инструмент, например apt (MANDATORY)
  • Только 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:
Наконец, я перевел свое третье требование с MANDATORY на OPTIONAL и выбрал проект Lombok (простая интеграция с Maven и Eclipse, практически никакой работы  для его использования).

4b9b3361

Ответ 1

Посмотрите Проект Ломбок. Он генерирует код, который вы задаете при написании:

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

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

Ответ 2

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

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

Ответ 3

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

Поскольку поколение с XML и XSLT, оно очень настраивается.

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