Как перехватить один метод с помощью SpringBoot AOP - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь вывести лог-сообщение всякий раз, когда вызывается функция someFunction ().

Это мой аспект:

@Aspect
@Component
public class MyAspect {

    private static final Logger LOGGER = Logger.getLogger(MyAspect.class.getName());

    @Pointcut("execution(com.practice.AOP.someFunction())")
    public void outputLogMessage() {
        LOGGER.info("someFunction has been invoked");
    }
}

Метод, который я пытаюсь перехватить, someFunction (), находится в классе com.practice.AOP. Когда я вызываю его (показано ниже), мой совет (сообщение журнала) не выводится, и при этом я не получаю сообщение об ошибке. Что я делаю неправильно? Pointcut - даже путь?

@SpringBootApplication
public class AOP {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
        someFunction();
    }

    public static void someFunction() {
        //should invoke the log message
    }
}

1 Ответ

0 голосов
/ 15 мая 2018

Spring AOP работает только на Spring bean-компонентах и ​​только на общедоступных методах тех Spring-бинов, вызываемых извне (т. Е. Вызовы в стиле this.publicMethod() не будут работать, так как они не проходят через прокси-серверы, созданные Spring AOP для рекомендации).ваши пружинные бины.

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

...