Как массово генерировать геттеры с помощью аспекта

У меня следующая проблема, мне интересно, знает ли кто-нибудь решение:

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

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


person user811521    schedule 23.06.2011    source источник
comment
Вы знаете, что можете сделать это автоматически в исходном коде большинства IDE, верно?   -  person BlueRaja - Danny Pflughoeft    schedule 25.06.2011


Ответы (2)


Вы изучали Ломбок? Если у вас есть доступ к исходному коду и вы просто пытаетесь сохранить ввод текста, его аннотация @Data может быть что вы ищете.

person Matt    schedule 24.06.2011

Как и в ответе Мэтта, я предлагаю вам Ломбок. Используя аннотации @Getter, @Setter на уровне класса, соответствующие геттеры/сеттеры на основе имен все нестатические поля будут сгенерированы при компиляции.

Намного лучше, чем аннотировать классы вручную, использовать статическое пересечение AspectJ (страница в официальной документации), чтобы добавить эти аннотации глобально.

Пример объявления @Getter и @Setter для каждого постоянного объекта:

import javax.persistence.Entity;
import lombok.Getter;
import lombok.Setter;

public aspect EntityAspect {
    declare @type: @Entity * : @Getter;
    declare @type: @Entity * : @Setter;
}

Это требует, чтобы вы либо имели исходный код, либо использовали компиляцию с помощью aspectj в существующей банке (инструментарий существующей библиотеки).

person JLM    schedule 07.07.2012
comment
Помните о некоторых проблемах при объединении Lombok и AspectJ. Я не знаю, решены ли они сейчас. - person kriegaex; 01.07.2015