Bird
Raised Fist0
Spring Bootframework~10 mins

@After and @AfterReturning in Spring Boot - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create an @After advice that runs after the method execution.

Spring Boot
@After("execution(* com.example.service.UserService.[1](..))")
public void afterMethod() {
    System.out.println("Method finished.");
}
Drag options to blanks, or click blank then click option'
AgetUser
BUserService
Cexecution
DafterMethod
Attempts:
3 left
💡 Hint
Common Mistakes
Using class name instead of method name in the pointcut.
Leaving the method name blank.
Using the advice method name instead of the target method name.
2fill in blank
medium

Complete the code to create an @AfterReturning advice that captures the returned value.

Spring Boot
@AfterReturning(pointcut = "execution(* com.example.service.OrderService.placeOrder(..))", returning = "[1]")
public void afterReturningAdvice(Object [1]) {
    System.out.println("Returned: " + [1]);
}
Drag options to blanks, or click blank then click option'
AreturnValue
Boutput
Cvalue
Dresult
Attempts:
3 left
💡 Hint
Common Mistakes
Mismatching the 'returning' attribute and method parameter names.
Using a name in the method parameter that is not declared in 'returning'.
3fill in blank
hard

Fix the error in the @AfterReturning advice by completing the missing part.

Spring Boot
@AfterReturning(pointcut = "execution(* com.example.repository.ProductRepository.findById(..))", returning = "[1]")
public void logReturnValue(Object [1]) {
    if ([1] != null) {
        System.out.println("Product found: " + [1]);
    }
}
Drag options to blanks, or click blank then click option'
Aproduct
Bresult
Cvalue
Ditem
Attempts:
3 left
💡 Hint
Common Mistakes
Using different names for 'returning' and the method parameter.
Forgetting to declare the parameter in the advice method.
4fill in blank
hard

Fill both blanks to create an @After advice that runs after any method in the service package.

Spring Boot
@After("execution(* com.example.service.[1].*(..))")
public void afterAnyMethod() {
    System.out.println("A service method finished: [2]");
}
Drag options to blanks, or click blank then click option'
AUserService
BOrderService
Cservice
DUserService.getUser
Attempts:
3 left
💡 Hint
Common Mistakes
Using package name instead of class name in the pointcut.
Putting a method name instead of class name in the pointcut.
5fill in blank
hard

Fill all three blanks to create an @AfterReturning advice that logs the returned value and method name.

Spring Boot
@AfterReturning(pointcut = "execution(* com.example.controller.[1].[2](..))", returning = "[3]")
public void logReturn(Object [3]) {
    System.out.println("Method [2] returned: " + [3]);
}
Drag options to blanks, or click blank then click option'
AUserController
BgetUserDetails
Cresult
DfetchData
Attempts:
3 left
💡 Hint
Common Mistakes
Mismatch between 'returning' attribute and method parameter name.
Using wrong class or method names in the pointcut.

Practice

(1/5)
1. What is the main difference between @After and @AfterReturning in Spring AOP?
easy
A. @After runs after method completion regardless of outcome; @AfterReturning runs only after successful return.
B. @After runs before the method; @AfterReturning runs after the method.
C. @After runs only if the method throws an exception; @AfterReturning runs always.
D. @After and @AfterReturning are exactly the same.

Solution

  1. Step 1: Understand @After behavior

    @After advice runs after a method finishes, whether it returns normally or throws an exception.
  2. Step 2: Understand @AfterReturning behavior

    @AfterReturning advice runs only if the method completes successfully without throwing exceptions.
  3. Final Answer:

    @After runs after method completion regardless of outcome; @AfterReturning runs only after successful return. -> Option A
  4. Quick Check:

    @After = always after, @AfterReturning = after success [OK]
Hint: Remember: @After always runs, @AfterReturning only on success [OK]
Common Mistakes:
  • Confusing @After with @Before advice
  • Thinking @AfterReturning runs on exceptions
  • Believing both advices behave identically
2. Which of the following is the correct syntax to define an @AfterReturning advice method in Spring AOP?
easy
A. @AfterReturning(pointcut = "execution(* com.example.*.*(..))", returning = "result") public void afterReturn(Object result) { }
B. @AfterReturning("execution(* com.example.*.*(..))") public void afterReturn() { }
C. @AfterReturning(returning = "result") public void afterReturn(Object result) { }
D. @AfterReturning(pointcut = "execution(* com.example.*.*(..))") public void afterReturn(Object result) { }

Solution

  1. Step 1: Check required attributes for @AfterReturning

    The @AfterReturning annotation requires a pointcut expression and optionally a returning attribute to capture the returned value.
  2. Step 2: Match method signature with returning attribute

    The method must have a parameter matching the name in returning to receive the returned value.
  3. Final Answer:

    @AfterReturning(pointcut = "execution(* com.example.*.*(..))", returning = "result") public void afterReturn(Object result) { } -> Option A
  4. Quick Check:

    Use both pointcut and returning with matching parameter [OK]
Hint: Use both pointcut and returning with matching method parameter [OK]
Common Mistakes:
  • Omitting pointcut attribute
  • Not matching returning name with method parameter
  • Using @AfterReturning without parameters
3. Given the following Spring AOP advice, what will be printed if someMethod() throws an exception?
@After("execution(* com.example.Service.someMethod(..))")
public void afterAdvice() {
    System.out.println("After advice executed");
}

@AfterReturning(pointcut = "execution(* com.example.Service.someMethod(..))", returning = "result")
public void afterReturningAdvice(Object result) {
    System.out.println("AfterReturning advice executed with: " + result);
}
medium
A. No advice executed
B. AfterReturning advice executed with: null
C. Both advices executed
D. After advice executed

Solution

  1. Step 1: Analyze @After advice behavior on exception

    @After advice runs after method finishes regardless of success or exception, so it will execute and print its message.
  2. Step 2: Analyze @AfterReturning advice behavior on exception

    @AfterReturning advice runs only if the method returns successfully, so it will NOT run if an exception is thrown.
  3. Final Answer:

    After advice executed -> Option D
  4. Quick Check:

    @After runs always, @AfterReturning skips on exceptions [OK]
Hint: @After runs always; @AfterReturning skips exceptions [OK]
Common Mistakes:
  • Assuming @AfterReturning runs on exceptions
  • Thinking both advices run always
  • Confusing advice execution order
4. Identify the error in the following advice method:
@AfterReturning(pointcut = "execution(* com.example.Service.process(..))", returning = "retVal")
public void afterReturn() {
    System.out.println("Returned value: " + retVal);
}
medium
A. The method should be annotated with @After instead of @AfterReturning.
B. The pointcut expression is invalid.
C. The advice method must have a parameter named retVal to receive the returned value.
D. The method must return a value.

Solution

  1. Step 1: Check method parameters for returning attribute

    The returning = "retVal" attribute requires the advice method to have a parameter named retVal to receive the returned value.
  2. Step 2: Verify method signature

    The method currently has no parameters, so it cannot access retVal, causing a compile error.
  3. Final Answer:

    The advice method must have a parameter named retVal to receive the returned value. -> Option C
  4. Quick Check:

    Returning attribute needs matching method parameter [OK]
Hint: Match returning name with method parameter to avoid errors [OK]
Common Mistakes:
  • Omitting method parameter for returning value
  • Misnaming the parameter
  • Using @AfterReturning without pointcut
5. You want to log the returned value of a service method only when it completes successfully, and also log a message after the method finishes regardless of outcome. Which advice combination should you use?
hard
A. Use two @AfterReturning advices for both logs.
B. Use @AfterReturning to log the returned value and @After to log after method completion.
C. Use @After advice only for both logs.
D. Use @Before advice to log returned value and @AfterReturning to log after completion.

Solution

  1. Step 1: Log returned value only on success

    @AfterReturning advice runs only after successful method return, so it is suitable to log the returned value.
  2. Step 2: Log after method finishes regardless of outcome

    @After advice runs after method completion whether success or exception, so it is suitable to log a message always.
  3. Final Answer:

    Use @AfterReturning to log the returned value and @After to log after method completion. -> Option B
  4. Quick Check:

    AfterReturning = success only, After = always after [OK]
Hint: Combine @AfterReturning for success and @After for always [OK]
Common Mistakes:
  • Using @After for returned value logging
  • Using @Before to log returned value
  • Expecting @AfterReturning to run on exceptions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard