Bird
Raised Fist0
Spring Bootframework~10 mins

Event publishing with ApplicationEventPublisher 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 inject ApplicationEventPublisher in a Spring component.

Spring Boot
public class MyComponent {

    private final ApplicationEventPublisher [1];

    public MyComponent(ApplicationEventPublisher publisher) {
        this.publisher = publisher;
    }
}
Drag options to blanks, or click blank then click option'
AeventPub
Bpublisher
CeventPublisher
DapplicationEventPublisher
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable name that does not match the constructor parameter.
Using a very long or unclear variable name.
2fill in blank
medium

Complete the code to publish a custom event using ApplicationEventPublisher.

Spring Boot
public void publishEvent(String message) {
    MyCustomEvent event = new MyCustomEvent(this, message);
    [1].publishEvent(event);
}
Drag options to blanks, or click blank then click option'
AeventPublisher
BapplicationEventPublisher
Cpublisher
DeventPub
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable name that was not declared.
Calling a wrong method instead of publishEvent.
3fill in blank
hard

Fix the error in the event class constructor to properly extend ApplicationEvent.

Spring Boot
public class MyCustomEvent extends ApplicationEvent {

    private final String message;

    public MyCustomEvent([1] source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}
Drag options to blanks, or click blank then click option'
AObject
BString
CApplicationEvent
DMyCustomEvent
Attempts:
3 left
💡 Hint
Common Mistakes
Using String or other types instead of Object for source.
Not calling super(source) in constructor.
4fill in blank
hard

Fill both blanks to create and publish a new event with a message.

Spring Boot
public void sendMessage(String msg) {
    [1] event = new MyCustomEvent(this, msg);
    [2].publishEvent(event);
}
Drag options to blanks, or click blank then click option'
AMyCustomEvent
Bpublisher
Cevent
DApplicationEventPublisher
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong class name for the event.
Trying to call publishEvent on the event object instead of the publisher.
5fill in blank
hard

Fill all three blanks to define a Spring component that publishes an event with a message.

Spring Boot
@Component
public class EventPublisher {

    private final [1] publisher;

    public EventPublisher([2]) {
        this.publisher = eventPublisher;
    }

    public void publish(String msg) {
        [3] event = new MyCustomEvent(this, msg);
        publisher.publishEvent(event);
    }
}
Drag options to blanks, or click blank then click option'
AApplicationEventPublisher publisher
BApplicationEventPublisher
CMyCustomEvent
DApplicationEventPublisher eventPublisher
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up field declaration and constructor parameter syntax.
Using wrong class names or missing variable names.

Practice

(1/5)
1. What is the primary role of ApplicationEventPublisher in a Spring Boot application?
easy
A. To manage HTTP requests and responses
B. To listen and handle events automatically
C. To configure database connections
D. To send or publish events within the application

Solution

  1. Step 1: Understand the purpose of ApplicationEventPublisher

    This interface is designed to publish events to listeners within the Spring application context.
  2. Step 2: Differentiate from listeners and other components

    Listeners handle events, but ApplicationEventPublisher only sends or publishes them.
  3. Final Answer:

    To send or publish events within the application -> Option D
  4. Quick Check:

    Event sending = ApplicationEventPublisher [OK]
Hint: Publisher sends events; listeners receive them [OK]
Common Mistakes:
  • Confusing publisher with listener
  • Thinking it manages HTTP or database
  • Assuming it handles event processing
2. Which of the following is the correct way to inject ApplicationEventPublisher in a Spring Boot component?
easy
A. @Autowired private ApplicationEventPublisher publisher;
B. private ApplicationEventPublisher publisher = new ApplicationEventPublisher();
C. @Inject ApplicationEventPublisher publisher = null;
D. ApplicationEventPublisher publisher = ApplicationEventPublisher.getInstance();

Solution

  1. Step 1: Recall Spring dependency injection syntax

    Spring uses @Autowired to inject beans automatically into components.
  2. Step 2: Check each option for correctness

    @Autowired private ApplicationEventPublisher publisher; uses @Autowired correctly. private ApplicationEventPublisher publisher = new ApplicationEventPublisher(); tries to instantiate interface (not allowed). @Inject ApplicationEventPublisher publisher = null; mixes @Inject with assignment (not typical in Spring). ApplicationEventPublisher publisher = ApplicationEventPublisher.getInstance(); uses a non-existent getInstance method.
  3. Final Answer:

    @Autowired private ApplicationEventPublisher publisher; -> Option A
  4. Quick Check:

    @Autowired injects beans properly [OK]
Hint: Use @Autowired for Spring bean injection [OK]
Common Mistakes:
  • Trying to instantiate ApplicationEventPublisher directly
  • Mixing injection annotations incorrectly
  • Using static getInstance() which doesn't exist
3. Given the following code snippet, what will be printed when publishEvent() is called?
public class MyEvent extends ApplicationEvent {
    public MyEvent(Object source) { super(source); }
}

@Component
public class MyPublisher {
    @Autowired
    private ApplicationEventPublisher publisher;

    public void publishEvent() {
        publisher.publishEvent(new MyEvent(this));
    }
}

@Component
public class MyListener {
    @EventListener
    public void handleMyEvent(MyEvent event) {
        System.out.println("Event received");
    }
}
medium
A. No output
B. Compilation error
C. Event received
D. Runtime exception

Solution

  1. Step 1: Understand event publishing and listening

    The publisher sends a MyEvent instance. The listener listens for MyEvent and prints "Event received".
  2. Step 2: Confirm no errors in code

    Code uses correct annotations and event class extending ApplicationEvent, so no errors or exceptions.
  3. Final Answer:

    Event received -> Option C
  4. Quick Check:

    Listener prints message on event [OK]
Hint: Listener prints message when event is published [OK]
Common Mistakes:
  • Forgetting @EventListener annotation
  • Not extending ApplicationEvent in event class
  • Expecting output without publishing event
4. Identify the error in the following Spring Boot event publishing code:
@Component
public class EventSender {
    private ApplicationEventPublisher publisher;

    public void send() {
        publisher.publishEvent(new CustomEvent(this));
    }
}

public class CustomEvent extends ApplicationEvent {
    public CustomEvent(Object source) { super(source); }
}
medium
A. send method should be static
B. ApplicationEventPublisher is not injected, so publisher is null
C. publishEvent method does not exist
D. CustomEvent does not extend ApplicationEvent

Solution

  1. Step 1: Check ApplicationEventPublisher usage

    The publisher field is declared but never injected or assigned, so it remains null.
  2. Step 2: Consequence of null publisher

    Calling publishEvent on null causes NullPointerException at runtime.
  3. Final Answer:

    ApplicationEventPublisher is not injected, so publisher is null -> Option B
  4. Quick Check:

    Missing injection causes null publisher [OK]
Hint: Always inject ApplicationEventPublisher before use [OK]
Common Mistakes:
  • Forgetting @Autowired on publisher
  • Assuming interface can be instantiated
  • Thinking method must be static
5. You want to publish a custom event UserCreatedEvent and ensure multiple listeners react differently. Which approach correctly implements this in Spring Boot?
hard
A. Create UserCreatedEvent extending ApplicationEvent, inject ApplicationEventPublisher, publish event, and annotate multiple methods with @EventListener for UserCreatedEvent
B. Create UserCreatedEvent as a simple POJO, call listeners manually without publishing events
C. Use ApplicationEventPublisher to publish String messages instead of event objects
D. Create UserCreatedEvent but do not extend ApplicationEvent; rely on @EventListener to catch any object

Solution

  1. Step 1: Define event class properly

    Custom events should extend ApplicationEvent for Spring to recognize them.
  2. Step 2: Publish event and create multiple listeners

    Inject ApplicationEventPublisher to publish event. Use @EventListener on multiple methods to react differently.
  3. Step 3: Evaluate other options

    Create UserCreatedEvent as a simple POJO, call listeners manually without publishing events skips event system, losing decoupling. Use ApplicationEventPublisher to publish String messages instead of event objects misuses publisher with Strings. Create UserCreatedEvent but do not extend ApplicationEvent; rely on @EventListener to catch any object breaks event contract, listeners may not work.
  4. Final Answer:

    Create UserCreatedEvent extending ApplicationEvent, inject ApplicationEventPublisher, publish event, and annotate multiple methods with @EventListener for UserCreatedEvent -> Option A
  5. Quick Check:

    Proper event class + publisher + listeners = correct [OK]
Hint: Extend ApplicationEvent and use @EventListener for multiple reactions [OK]
Common Mistakes:
  • Not extending ApplicationEvent for custom events
  • Calling listeners manually instead of publishing
  • Publishing wrong object types like String
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