Step 2: Identify which advice can measure execution time
@Around can run code before and after method, so it can measure duration.
Final Answer:
@Around -> Option C
Quick Check:
@Around wraps method for timing [OK]
Hint: Use @Around to wrap and time methods [OK]
Common Mistakes:
Using @Before or @After which can't measure duration
Confusing @Pointcut with advice annotation
Assuming @After runs before method
3. Given this AOP method, what will be printed if the target method takes 150ms to execute?
@Around("execution(* com.example.service.*.*(..))")
public Object measureTime(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object result = pjp.proceed();
long end = System.currentTimeMillis();
System.out.println("Execution time: " + (end - start) + " ms");
return result;
}
medium
A. Execution time: 0 ms
B. No output printed
C. Execution time: 300 ms
D. Execution time: 150 ms
Solution
Step 1: Understand timing calculation
The code records start time, runs the method, then records end time and prints the difference.
Step 2: Match timing with method duration
If method takes 150ms, printed time is 150 ms.
Final Answer:
Execution time: 150 ms -> Option D
Quick Check:
Printed time matches method duration [OK]
Hint: Printed time equals method run duration [OK]
Common Mistakes:
Assuming time is zero or double counted
Thinking no output prints
Confusing start and end time order
4. What is wrong with this AOP advice for measuring execution time?
@Around("execution(* com.example..*(..))")
public void measure(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
pjp.proceed();
long end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
}
medium
A. The pointcut expression is invalid
B. The method should return Object, not void
C. System.currentTimeMillis() cannot be used for timing
D. ProceedingJoinPoint cannot be used in @Around advice
Solution
Step 1: Check method signature for @Around advice
@Around advice must return the result of pjp.proceed() to maintain method behavior.
Step 2: Identify missing return statement
Method returns void but should return Object from pjp.proceed().
Final Answer:
The method should return Object, not void -> Option B
Quick Check:
@Around advice must return method result [OK]
Hint: @Around methods must return Object from proceed() [OK]
Common Mistakes:
Forgetting to return pjp.proceed() result
Thinking pointcut syntax is wrong
Believing System.currentTimeMillis() is invalid
5. You want to monitor execution time of all service methods but exclude methods annotated with @SkipTiming. Which AOP pointcut expression correctly achieves this?
hard
A. execution(* com.example.service..*(..)) && !@annotation(com.example.SkipTiming)
B. execution(* com.example.service..*(..)) || @annotation(com.example.SkipTiming)
C. execution(* com.example.service..*(..)) && @annotation(com.example.SkipTiming)
D. !execution(* com.example.service..*(..)) && !@annotation(com.example.SkipTiming)
Solution
Step 1: Understand pointcut logic for inclusion and exclusion
We want all service methods except those with @SkipTiming annotation.
Step 2: Use && with negation to exclude annotated methods
Use 'execution(...) && !@annotation(...)' to include methods but exclude those annotated.
Final Answer:
execution(* com.example.service..*(..)) && !@annotation(com.example.SkipTiming) -> Option A
Quick Check:
Exclude annotated methods with !@annotation [OK]
Hint: Use && !@annotation to exclude methods [OK]
Common Mistakes:
Using || which includes annotated methods
Using && @annotation which includes only annotated
Negating execution pointcut incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.