Bird
Raised Fist0
Spring Bootframework~20 mins

Pointcut expressions in Spring Boot - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Pointcut Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding basic pointcut expression syntax
Which of the following pointcut expressions matches all methods in any class within the package com.example.service?
Awithin(com.example.service.*)
Bexecution(* com.example.service..*.*(..))
Cexecution(* com.example.service.*.*(..))
Dwithin(com.example.service..*)
Attempts:
2 left
💡 Hint
Remember that execution matches method executions and within matches types. The single dot . matches one package level, double dot .. matches any subpackage levels.
❓ component_behavior
intermediate
2:00remaining
Effect of pointcut on method interception
Given the pointcut expression execution(public * *(..)), which methods will be intercepted?
AAll public methods regardless of class or package
BOnly public methods in the current package
CAll methods with any visibility in any class
DOnly methods named 'public' in any class
Attempts:
2 left
💡 Hint
Look at the modifiers and wildcards in the expression carefully.
📝 Syntax
advanced
2:00remaining
Identify the syntax error in pointcut expression
Which option contains a syntax error in the pointcut expression?
Aexecution(* com.example.service.*.*(String, ..))
Bexecution(* com.example.service.*.*(String,))
Cexecution(* com.example.service.*.*(..))
Dexecution(* com.example..service.*.*(..))
Attempts:
2 left
💡 Hint
Check the parameter pattern syntax carefully, especially commas and ellipsis.
🔧 Debug
advanced
2:00remaining
Why does this pointcut not match any method?
Consider this pointcut expression: execution(* com.example..*Service+.save*(..)). It does not match any methods in your project. What is the most likely reason?
AThe pointcut expects classes ending with 'Service' or subclasses, but your classes do not extend any superclass
BThe '+' symbol is used incorrectly; it should be '*' to match subclasses
CThe package pattern <code>com.example..</code> is invalid and causes no matches
DThe method name pattern <code>save*</code> does not match because methods are named exactly 'save'
Attempts:
2 left
💡 Hint
Recall what the '+' symbol means in pointcut expressions.
❓ lifecycle
expert
3:00remaining
Order of pointcut evaluation in Spring AOP
In Spring AOP, when multiple pointcuts apply to the same method, in what order are they evaluated?
APointcuts are evaluated randomly at runtime
BPointcuts are evaluated based on their declaration order in the XML configuration
CPointcuts are evaluated in the order they are declared in the aspect class
DPointcuts are evaluated based on the order of aspect precedence and then method signature specificity
Attempts:
2 left
💡 Hint
Think about how Spring resolves multiple aspects and pointcuts.

Practice

(1/5)
1. What does a pointcut expression in Spring Boot primarily do?
easy
A. Create new methods dynamically at runtime
B. Define the database connection settings
C. Select methods where extra code (advice) should run
D. Replace existing methods with new implementations

Solution

  1. Step 1: Understand the purpose of pointcut expressions

    Pointcut expressions specify where additional code, called advice, should be applied in existing methods without changing those methods.
  2. Step 2: Differentiate from other concepts

    They do not create or replace methods, nor configure databases. Their role is to select join points (methods) for advice.
  3. Final Answer:

    Select methods where extra code (advice) should run -> Option C
  4. Quick Check:

    Pointcut expression = Select methods for advice [OK]
Hint: Pointcuts pick methods to add code without changing them [OK]
Common Mistakes:
  • Confusing pointcuts with method creation
  • Thinking pointcuts configure databases
  • Believing pointcuts replace method code
2. Which of the following is the correct syntax to match all methods in package com.example.service using a pointcut expression?
easy
A. execution(* com.example.service..*(..))
B. execution(com.example.service.*.*(..))
C. execution(* com.example.service.*(..))
D. execution(* com.example.service.*.*(..))

Solution

  1. Step 1: Understand the execution syntax

    The syntax execution(* com.example.service.*.*(..)) matches any return type, any class in the package com.example.service, and any method with any parameters.
  2. Step 2: Analyze other options

    execution(com.example.service.*.*(..)) misses the wildcard for return type. execution(* com.example.service..*(..)) uses double dot .. which matches subpackages, not just the package. execution(* com.example.service.*(..)) misses the class wildcard.
  3. Final Answer:

    execution(* com.example.service.*.*(..)) -> Option D
  4. Quick Check:

    Use * for any class and method in package [OK]
Hint: Use * for any class and method in a package [OK]
Common Mistakes:
  • Omitting the return type wildcard *
  • Using .. instead of * for classes
  • Missing method wildcard *
3. Given the pointcut expression execution(public * com.example.repo.*Repository.find*(..)), which methods will it match?
medium
A. All methods named 'find' in any class in com.example.repo
B. All public methods starting with 'find' in any class ending with 'Repository' in package com.example.repo
C. All public methods in any class in com.example.repo
D. Only methods named exactly 'find' in any class ending with 'Repository'

Solution

  1. Step 1: Break down the expression

    public * means any public return type, com.example.repo.*Repository matches classes ending with 'Repository' in the package, and find*(..) matches methods starting with 'find' with any parameters.
  2. Step 2: Match options to expression meaning

    All public methods starting with 'find' in any class ending with 'Repository' in package com.example.repo correctly describes all public methods starting with 'find' in classes ending with 'Repository' in the package. Others are either too broad or too narrow.
  3. Final Answer:

    All public methods starting with 'find' in any class ending with 'Repository' in package com.example.repo -> Option B
  4. Quick Check:

    execution(public * com.example.repo.*Repository.find*(..)) = All public methods starting with 'find' in any class ending with 'Repository' in package com.example.repo [OK]
Hint: Look for wildcards * and method name patterns carefully [OK]
Common Mistakes:
  • Ignoring method name prefix 'find*'
  • Confusing class name pattern *Repository
  • Missing public modifier effect
4. Identify the error in this pointcut expression: execution(* com.example..service.*(..)
medium
A. Missing closing parenthesis at the end
B. Incorrect use of double dots '..' in package name
C. Wildcard '*' cannot be used for method names
D. Return type '*' is invalid

Solution

  1. Step 1: Check syntax completeness

    The expression is missing a closing parenthesis ')' at the end, which is required to close the execution() expression.
  2. Step 2: Validate other parts

    Double dots '..' are valid to match subpackages, '*' is valid for method names, and '*' is valid for return type.
  3. Final Answer:

    Missing closing parenthesis at the end -> Option A
  4. Quick Check:

    Check parentheses balance in execution() [OK]
Hint: Count parentheses carefully in pointcut expressions [OK]
Common Mistakes:
  • Forgetting closing parenthesis
  • Misunderstanding '..' usage
  • Thinking '*' is invalid for methods or return types
5. You want to create a pointcut expression that matches all methods in any class within com.app.service and its subpackages, but only methods that have exactly two parameters of any type. Which expression is correct?
hard
A. execution(* com.app.service..*.*(*, *))
B. execution(* com.app.service.*.*(..))
C. execution(* com.app.service..*.*(.., ..))
D. execution(* com.app.service..*.*(*))

Solution

  1. Step 1: Understand package and subpackage matching

    com.app.service..* matches classes in the package and all subpackages.
  2. Step 2: Match method parameters exactly

    (* , *) means exactly two parameters of any type. (..) means any number of parameters, so it's incorrect here.
  3. Step 3: Analyze options

    execution(* com.app.service..*.*(*, *)) correctly matches all classes in package and subpackages with exactly two parameters. Others either match any number of parameters or wrong parameter counts.
  4. Final Answer:

    execution(* com.app.service..*.*(*, *)) -> Option A
  5. Quick Check:

    Use (*, *) for exactly two parameters [OK]
Hint: Use (*, *) to match exactly two parameters [OK]
Common Mistakes:
  • Using (..) to match exact parameter count
  • Confusing single * with .. for subpackages
  • Missing commas between parameters
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