Tutorial de eventos de inicialização da primavera – comunidade de desenvolvimento

1. O que é um evento de primavera? A Spring fornece um modelo de programação orientado a eventos interno que permite que diferentes partes do seu aplicativo se comuniquem sem serem bem acopladas. Um evento na primavera é um objeto que carrega informações sobre algo que aconteceu e é publicado para notificar os ouvintes interessados. Exemplos: Usuário Registrado → Envie um pedido de e -mail bem -vindo colocado → Reduza o estoque, envie o arquivo de notificação Carregado → Trigger Processamento de fundo Isso é baseado no padrão de design do observador, onde os editores não sabem quem ouve, e os ouvintes não se importam com quem publica. 2. Como funciona? O fluxo de trabalho se parece com o seguinte: criação de eventos Uma classe que estende o ApplicationEvent (ou qualquer pojo personalizado desde a primavera 4.2). Publicação de eventos Use ApplicationEventPublisher para publicar eventos. Audição de eventos Crie um ouvinte usando @EventListener (ou ApplicationListener). O ApplicationEventMulticaSaster de lidabilidade de eventos da Spring envia o evento para os ouvintes. 3. Quando e quando não usá -lo? Quando usar: para desacoplar a lógica de negócios. Exemplo: um serviço de usuário não deve saber como as notificações ou e -mails são tratados. Para efeitos colaterais após as ações principais (registro, auditoria, envio de alertas). Para extensibilidade, onde outros módulos podem se inscrever sem modificar a lógica do núcleo. Quando não usar: para os principais fluxos de trabalho de negócios, onde os limites de pedidos e transações são críticos. Para dependências síncronas que devem sempre ser executadas. Exemplo: Pagamento → Confirmação do pedido → Fatura. Estas devem ser chamadas de serviço, não eventos. Para orquestração complexa. Considere soluções de mensagens (Kafka, RabbitMQ, etc.). 4. Como criar e publicar um domínio de exemplo de evento: Registro do usuário a) Criar um evento (POJO POJO personalizado) UserReGisterEDevent {private final String email; public userGisterEDevent (string email) {this.email = email; } public String getEmail () {retornar email; }} Digite o modo de saída da tela cheia de tela cheia b) Publique um evento (mesmo thread) import org.springframework.context.applicationEventPublisher; importar org.springframework.tereotype.service; @Service Public Class UserService {private final ApplicationEventPublisher Publisher; Public UserService (ApplicationEventPublisher Publisher) {this.publisher = Publisher; } public void RegisterUser (string email) {// principal lógica system.out.println (“Usuário registrado:” + email); // Publish Event Publisher.publishEvent (novo userReGisterEDevent (email)); }} Digite Modo de tela Full -Screen Modo de tela cheia Nota: Por padrão, os eventos são síncronos. O editor e o ouvinte são executados no mesmo thread. c) Publique um evento (thread diferente – assíncrono) Ativa o manuseio de eventos Async: importar org.springframework.context.annotation.configuration; importar org.springframework.scheduling.annotation.enableasync; @Configuration @enableasync public class AsyncConfig {} Digite Modo de tela FullScreen Sair importar org.springframework.scheduling.annotation.async; importar org.springframework.tereotype.component; @Component public class Emaillistener {@async @eventListener public void handleUserRegistered (Evento UserRegeDeDevent) {System.out.println (“Enviando email para:” + event.getEmail ()); }} Digite o modo de saída da tela cheia agora, o envio de email é executado em um thread separado (do pool de executor assíncrono da primavera). 5. Como capturar um evento Existem duas abordagens principais: a) Usando @EventListener importar org.springframework.context.event.eventListener; importar org.springframework.tereotype.component; @Component public class WelcomeMaillistener {@EventListener public void onUserRegistered (Evento UserReGisterEDevent) {System.out.println (“E -mail de boas -vindas enviado para:” + event.getemail ()); }} Digite o modo de saída da tela cheia de tela cheia b) usando o ApplicationListener import org.springframework.context.applicationListener; importar org.springframework.tereotype.component; @Component Public Class AuditLogListener implementa ApplicationListener {@Override public void onApplicationEvent (Evento UserRegeDeDevent) {System.out.println (“Log de auditoria: Usuário registrado com email” + event.getEmail ()); }} Digite os eventos de mola do modo de tela cheia do modo de tela cheia ajudam a desacupar os componentes usando uma abordagem orientada a eventos. O editor dispara eventos e os ouvintes reagem a eles. Os eventos são síncronos por padrão, mas podem ser feitos assíncronos com @async. Use -os para efeitos colaterais, extensibilidade e desacoplamento, mas evite -os nos fluxos de trabalho transacionais principais.

Fonte

Você pode ter perdido