Привязка интерфейса/класса к любому классу «начисто»JAVA

Программисты JAVA общаются здесь
Anonymous
Привязка интерфейса/класса к любому классу «начисто»

Сообщение Anonymous »

При наличии произвольного класса POJO я хочу перехватить все установщики и выполнить некоторые «магические действия» для каждого экземпляра. Естественно, я подумал об AspectJ/AOP.
  • Я определил аннотацию маркера
  • Я определил @Aspect с поведением perthis(), которое перехватывает все методы установки
  • Я добавил это в @Aspect, чтобы привязать поведение к любым объектам, отмеченным @MyInterface:

    Код: Выделить всё

    @DeclareParents(value = "@MyInterface *", defaultImpl = MyInterfaceImpl.class)
    private MyObject myObject = null;
    
  • Интерфейс имеет этот метод:

    Код: Выделить всё

    Map getMagicStuff();
    Этот метод реализован в MyInterfaceImpl
Это все работает как POC и я могу это сделать:

Код: Выделить всё

((MyObject) obj).getMagicStuff();
Но это некрасиво. Я хочу уметь:

Код: Выделить всё

someObject.getMagicStuff();
Я провел некоторое тестирование, и если я заставлю свой POJO реализовать интерфейс, то AspectJ не «перезапишет его».
В идеальном случае мире, я бы получил поведение, подобное Lomboks @Getter, но для этого требуется поддержка IntelliJ, а также работа с деревом AST и тому подобное.
Я знаю, что могу определить метод по умолчанию в интерфейсе, но у него не будет доступа к реализации.
Как это сделать?

Подробнее здесь: https://stackoverflow.com/questions/781 ... ss-cleanly

Вернуться в «JAVA»