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());
}
}
Întrebări & Exemple de Cod:
@EventListener și ApplicationEventPublisherAi o nelămurire despre utilizarea comenzii
@EventListener și ApplicationEventPublishersau 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.