Пример простого аспекта логирования:
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBeforeMethod() {
System.out.println("Метод сервиса вызывается...");
}
@AfterReturning("execution(* com.example.service.*.*(..))")
public void logAfterMethod() {
System.out.println("Метод сервиса успешно завершен!");
}
}
Как это работает:
@Aspect говорит Spring, что это класс-аспект.
Аннотация @Before указывает, что метод logBeforeMethod() должен вызываться до выполнения каждого метода, подходящего под шаблон (* — любое имя, .. — любые параметры).
@AfterReturning — после успешного завершения метода.
Spring при запуске создает «прокси» вокруг всех подходящих бинов (@Service и др.), и при каждом вызове метода выполняет «вплетенный» код из аспектов.
