Bird
Raised Fist0
Spring Bootframework~10 mins

@Before advice 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 define a method that runs before the target method using @Before advice.

Spring Boot
@Before("execution(* com.example.service.UserService.[1](..))")
public void beforeAdvice() {
    System.out.println("Before method execution");
}
Drag options to blanks, or click blank then click option'
AgetUser
BsetUser
CdeleteUser
DupdateUser
Attempts:
3 left
💡 Hint
Common Mistakes
Using a method name that does not exist in the service.
Forgetting to include parentheses (..).
2fill in blank
medium

Complete the code to import the correct package for @Before advice in Spring AOP.

Spring Boot
import org.aspectj.lang.annotation.[1];
Drag options to blanks, or click blank then click option'
ABefore
BAfter
CAround
DPointcut
Attempts:
3 left
💡 Hint
Common Mistakes
Importing the wrong annotation like @After or @Around.
Missing the import statement entirely.
3fill in blank
hard

Fix the error in the pointcut expression to correctly match all methods in the service package.

Spring Boot
@Before("execution(* com.example.service.[1].*(..))")
public void logBefore() {
    System.out.println("Method called");
}
Drag options to blanks, or click blank then click option'
A*
BUserService.*
CUserService..
DUserService
Attempts:
3 left
💡 Hint
Common Mistakes
Using double dots (..) incorrectly in the class name.
Adding extra wildcards in the class name.
4fill in blank
hard

Fill both blanks to create a @Before advice that runs before any method in any class inside the service package.

Spring Boot
@Before("execution(* com.example.service.[1].[2](..))")
public void beforeAnyMethod() {
    System.out.println("Before any service method");
}
Drag options to blanks, or click blank then click option'
A*
Bget*
Cset*
DUserService
Attempts:
3 left
💡 Hint
Common Mistakes
Using specific class or method names instead of wildcards.
Mixing wildcards with method name prefixes incorrectly.
5fill in blank
hard

Fill all three blanks to define a @Before advice that runs before all public methods in the controller package.

Spring Boot
@Before("execution(public [1] com.example.controller.[2].[3](..))")
public void beforeControllerMethods() {
    System.out.println("Before controller method");
}
Drag options to blanks, or click blank then click option'
A*
Dvoid
Attempts:
3 left
💡 Hint
Common Mistakes
Using specific return types like void limits matching.
Not using wildcards for class or method names.

Practice

(1/5)
1. What is the main purpose of the @Before advice in Spring AOP?
easy
A. To replace the matched method entirely
B. To run code right before the matched method executes
C. To run code after the matched method completes
D. To handle exceptions thrown by the matched method

Solution

  1. Step 1: Understand the role of @Before advice

    @Before advice is designed to execute code just before the target method runs.
  2. Step 2: Compare with other advice types

    @After runs after method completion, @Around can replace, and @AfterThrowing handles exceptions.
  3. Final Answer:

    To run code right before the matched method executes -> Option B
  4. Quick Check:

    @Before advice = runs before method [OK]
Hint: Remember: @Before means before method starts [OK]
Common Mistakes:
  • Confusing @Before with @After or @Around advice
  • Thinking @Before replaces the method
  • Assuming @Before handles exceptions
2. Which of the following is the correct syntax to define a @Before advice method in Spring AOP?
easy
A. @Before("execution(* com.example.service.*.*(..))") public void logBefore() {}
B. @Before public void logBefore() { execution(* com.example.service.*.*(..)); }
C. @Before public void logBefore() execution(* com.example.service.*.*(..)) {}
D. @Before("logBefore()") public void execution(* com.example.service.*.*(..)) {}

Solution

  1. Step 1: Identify correct @Before annotation usage

    The @Before annotation requires a pointcut expression as a string parameter inside parentheses and quotes.
  2. Step 2: Check method signature and placement

    The method should be public void with no parameters or with JoinPoint if needed, and the pointcut is inside @Before("...").
  3. Final Answer:

    @Before("execution(* com.example.service.*.*(..))") public void logBefore() {} -> Option A
  4. Quick Check:

    @Before("pointcut") public void method() {} [OK]
Hint: Look for @Before with pointcut string in parentheses [OK]
Common Mistakes:
  • Placing pointcut expression outside quotes
  • Missing parentheses after @Before
  • Incorrect method signature or missing public
3. Given the following code snippet, what will be printed when service.process() is called?
@Aspect
@Component
public class LoggingAspect {
  @Before("execution(* com.example.service.Service.process(..))")
  public void beforeProcess() {
    System.out.println("Before process");
  }
}

@Service
public class Service {
  public void process() {
    System.out.println("Processing");
  }
}
medium
A. Before process\nProcessing
B. Processing\nBefore process
C. Before process
D. Processing

Solution

  1. Step 1: Understand @Before advice execution timing

    @Before advice runs before the matched method, so "Before process" prints first.
  2. Step 2: Analyze method call output

    Then the actual method prints "Processing" after the advice.
  3. Final Answer:

    Before process\nProcessing -> Option A
  4. Quick Check:

    @Before prints first, then method output [OK]
Hint: @Before prints before method output [OK]
Common Mistakes:
  • Assuming method prints before advice
  • Thinking advice replaces method output
  • Ignoring advice execution order
4. Identify the error in this @Before advice definition:
@Before("execution(* com.example..*(..))")
public void beforeMethod() {
  System.out.println("Before method");
}
medium
A. Advice method cannot have a body
B. Pointcut expression syntax is invalid
C. Method must return a value
D. Missing @Aspect annotation on the class

Solution

  1. Step 1: Check class-level annotations

    For @Before advice to work, the class must be annotated with @Aspect to mark it as an aspect.
  2. Step 2: Validate pointcut and method

    The pointcut expression is valid, and advice methods can have bodies and return void.
  3. Final Answer:

    Missing @Aspect annotation on the class -> Option D
  4. Quick Check:

    @Aspect missing = advice won't run [OK]
Hint: Always add @Aspect on the class with advice [OK]
Common Mistakes:
  • Forgetting @Aspect on the aspect class
  • Assuming advice methods must return values
  • Misreading pointcut syntax errors
5. You want to log a message before any method in com.example.repository package is called, but only for methods starting with save. Which @Before pointcut expression correctly matches this?
hard
A. @Before("execution(* com.example.repository.save*(..))")
B. @Before("execution(* com.example.repository.*save*(..))")
C. @Before("execution(* com.example.repository..save*(..))")
D. @Before("execution(* com.example.repository.*.save*(..))")

Solution

  1. Step 1: Understand pointcut syntax for package, class, and method

    To match methods starting with 'save' in any class of the com.example.repository package, use execution(* com.example.repository.*.save*(..)). However, if you want to include subpackages as well, use '..' instead of a single '*'.
  2. Step 2: Analyze each option

    A matches only methods named save* in the package directly (no class wildcard), B is invalid syntax, C matches methods in any class in the package but not subpackages, D matches methods starting with save in the package and all subpackages.
  3. Final Answer:

    @Before("execution(* com.example.repository..save*(..))") -> Option C
  4. Quick Check:

    package..save*(..) = matches package and subpackages [OK]
Hint: Use package..save* to include subpackages and methods starting with save [OK]
Common Mistakes:
  • Using incorrect wildcards or dots in method name
  • Matching subpackages unintentionally
  • Misplacing wildcards in pointcut expression
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