📢
Advanced Spring

Application Events

Publisher-Subscriber Pattern
💡 Spring Events ek NOTICE BOARD hai OFFICE mein — ek department (OrderService) NOTICE BOARD par ek ANNOUNCEMENT (event) laga deता hai, aur JIN-JIN departments ko INTEREST hai (EmailService, InventoryService), WO khud dekh ke REACT kar lete hain — announcer ko PATA hi NAHI hota KAUN-KAUN react kar raha hai.

Spring's built-in EVENT system PUBLISHER-SUBSCRIBER pattern IMPLEMENT karta hai — ek COMPONENT ApplicationEventPublisher se EVENT PUBLISH karta hai, aur MULTIPLE, INDEPENDENT listeners (@EventListener) us event ko REACT kar sakte hain. Ye DECOUPLING achieve karta hai — publisher ko PATA NAHI hona chahiye KAUN listen kar raha hai.

Real-world example — Order place hone par, EK EVENT (OrderPlacedEvent) PUBLISH hota hai. EmailService email BHEJTA hai, InventoryService STOCK update karta hai, AnalyticsService METRICS track karta hai — TEENO INDEPENDENTLY, bina OrderService ko unke EXISTENCE ka PATA hone ke.

// Event class:
public class OrderPlacedEvent {
    private final Order order;
    public OrderPlacedEvent(Order order) { this.order = order; }
    public Order getOrder() { return order; }
}

// Publisher:
@Service
public class OrderService {
    private final ApplicationEventPublisher publisher;

    public void placeOrder(Order order) {
        orderRepository.save(order);
        publisher.publishEvent(new OrderPlacedEvent(order));   // "fire and forget"
    }
}

// Listeners — MULTIPLE, INDEPENDENT:
@Component
public class EmailNotifier {
    @EventListener
    public void onOrderPlaced(OrderPlacedEvent event) {
        emailService.send(event.getOrder());
    }
}

@Component
public class InventoryUpdater {
    @EventListener
    public void onOrderPlaced(OrderPlacedEvent event) {
        inventoryService.reduceStock(event.getOrder());
    }
}
📢
Spring Events ek NOTICE BOARD hai OFFICE mein — ek department (OrderService) NOTICE BOARD par ek ANNOUNCEMENT (event) laga deता hai, aur JIN-JIN departments ko INTEREST hai (EmailService, InventoryService), WO khud dekh ke REACT kar lete hain — announcer ko PATA hi NAHI hota KAUN-KAUN react kar raha hai.
1 / 6
⚡ झट से Recap
  • ApplicationEventPublisher = event publish karta hai, listeners se DECOUPLED
  • @EventListener = automatically matching-type events react karta hai
  • Multiple listeners EK event ko INDEPENDENTLY handle kar sakte hain
इस page में (2 subtopics)

ApplicationEventPublisher se, ek component EVENT PUBLISH kar sakta hai bina ye jaने ki KAUN LISTEN kar raha hai — DECOUPLING achieve hota hai. Jaise OrderPlacedEvent publish hone par, EmailService aur InventoryService dono INDEPENDENTLY react kar sakte hain, bina OrderService ko unke baare mein pata hue.

@Service
public class OrderService {
    private final ApplicationEventPublisher publisher;

    public void placeOrder(Order order) {
        orderRepository.save(order);
        publisher.publishEvent(new OrderPlacedEvent(order));
    }
}

@EventListener annotation se, KOI BHI bean EVENT ko LISTEN kar sakta hai — bina explicit registration ke, Spring AUTOMATICALLY method ko CALL karta hai jab MATCHING TYPE ka event publish hota hai. Multiple listeners EK EVENT ko independently handle kar sakte hain.

@Component
public class EmailNotifier {
    @EventListener
    public void onOrderPlaced(OrderPlacedEvent event) {
        emailService.send(event.getOrder().getCustomerEmail(), "Order confirmed!");
    }
}