@EventListener și ApplicationEventPublisher în Spring Boot

core Spring Boot 3.x / Java 17+ Q&A / Distribuie cod

Arhitectură bazată pe evenimente interne decuplate în memorie cu ApplicationEventPublisher și adnotarea @EventListener.

Sintaxă
@EventListener / eventPublisher.publishEvent(event)

Pentru a menține modulele aplicative slab cuplate (Loose Coupling), Spring Boot oferă un mecanism nativ de Publish/Subscribe în memorie. Când se produce o acțiune importantă (cum ar fi finalizarea unei comenzi), serviciul responsabil publică un eveniment prin ApplicationEventPublisher fără a cunoaște cine îl va consuma.

Orice alt serviciu poate asculta și reacționa la acel eveniment folosind adnotarea @EventListener sau chiar asincron cu @Async.

Exemplu: Publicare și ascultare eveniment de înregistrare utilizator
package ro.dexblog.demo.events;

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

// Obiectul eveniment
public record UserRegisteredEvent(String email, String username) {}

@Service
public class RegistrationService {
    private final ApplicationEventPublisher publisher;

    public RegistrationService(ApplicationEventPublisher publisher) {
        this.publisher = publisher;
    }

    public void registerUser(String email, String username) {
        System.out.println("Utilizator salvat în baza de date: " + username);
        // Publicăm evenimentul către ascultători
        publisher.publishEvent(new UserRegisteredEvent(email, username));
    }
}

@Component
public class WelcomeEmailNotifier {
    @EventListener
    public void onUserRegistered(UserRegisteredEvent event) {
        System.out.println("Trimitere email de bun venit către: " + event.email());
    }
}

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: @EventListener și ApplicationEventPublisher

Ai o nelămurire despre utilizarea comenzii @EventListener și ApplicationEventPublisher sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.