Как выполнить действия до и после вызова метода, используя Java Reflection

Наверное, вы знакомы с Spring AOP. С его помощью с помощью аннотаций, можно задать правило, что будет выполняться до вызова метода (@Before) и после (@After) и ещё много чего.

Моя проблема очень похожа на эту: Мне нужно найти метод в классе, который помечен аннотацией MyAnnnotation, и при компиляции, изменить правило выполнения так, что любой объект, который вызвал бы данный метод объекта происходил примерно такой действие:

  1. Действие до
  2. Основной вызываемый метод
  3. Действие после

Вот некоторый шаблон:

public class HelloWorld {

    // Поля

    // Конструкторы

    @MyAnnotation
    public void sayHello() {
        System.out.println("Hello, world!");
    }

    // Геттеры, сеттеры и прочее
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}

public class Main {

    public static void main(String[] args) {
        Class<?> clazz = HelloWorld.class;
        // тут должна быть логика

        HelloWorld hellow = new HelloWorld();

        /**
         *  Сначала должен выполниться метод ДО
         *  Потом должна выводиться сообщение Hello World
         *  Затем — действие ПОСЛЕ
         */
        hellow.sayHello();
    }
}

Ответы (1 шт):

Автор решения: Вадим

Вы можете использовать срез по аннотации

@Before("@annotation(MyAnnotation)")

Или spring запрещено использовать?

→ Ссылка