Как динамически генерировать код с аннотациями во время сборки в 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 и, таким образом, вероятно, уже предшествовали более простые решения.