Q1. How would you implement logging using AOP in a Spring project?
Create an aspect class annotated with @Aspect and @Component. Define a pointcut for all service methods, and a @Before advice to log method entry. Example:
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void log(JoinPoint jp) {
System.out.println("Entering " + jp.getSignature());
}
}
Enable AspectJ proxy in config with @EnableAspectJAutoProxy.Q2. How do you measure method execution time using AOP?
Use Around advice to capture start and end time. Example:
@Around("@annotation(com.example.Timed)")
public Object measureTime(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object result = pjp.proceed();
long elapsed = System.currentTimeMillis() - start;
System.out.println(pjp.getSignature() + " took " + elapsed + " ms");
return result;
}
Q3. How would you implement a simple security check using AOP?
Define a custom annotation @Secured, and use Before advice to check user role. Example:
@Before("@annotation(secured)")
public void checkSecurity(Secured secured) {
if(!userHasRole(secured.role())) throw new SecurityException();
}
Q4. What is needed to enable AOP in a Spring Boot project?
Add spring-boot-starter-aop dependency. Spring Boot auto-configures AspectJ auto-proxy. You can also add @EnableAspectJAutoProxy manually if needed. Then define @Aspect classes as components.
Q5. How do you handle exceptions in AOP?
Use @AfterThrowing advice to catch exceptions. You can log them or perform custom handling. For around advice, you can catch exceptions in the try-catch block around proceed().
