import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
@Aspect
public class LoggingAspect {
@Pointcut("execution(* com.example.myapp..*(..))")
public void applicationPackagePointcut() {
}
@Before("applicationPackagePointcut()")
public void logBefore(JoinPoint joinPoint) {
System.out.println("Calling method: " + joinPoint.getSignature().getName());
}
@AfterThrowing(pointcut = "applicationPackagePointcut()", throwing = "ex")
public void logAfterThrowing(JoinPoint joinPoint, Throwable ex) {
System.out.println("Exception in method: " + joinPoint.getSignature().getName());
System.out.println("Exception message: " + ex.getMessage());
}
@Around("applicationPackagePointcut()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Before method: " + joinPoint.getSignature().getName());
Object result = joinPoint.proceed();
System.out.println("After method: " + joinPoint.getSignature().getName());
return result;
}
}
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
// Other configurations
@Bean
public LoggingAspect loggingAspect() {
return new LoggingAspect();
}
}