CDI Events - Acoplamento Solto e Extensibilidade
O CDI permite estender o código de negócios pelo padrão Notificador / Observador.
Para fazer isso, basta injetar um campo Event
na classe notifier. Essa classe é um modelo e o tipo de parâmetro é o tipo de objeto a ser disparado. Então, quando você quiser notificar observadores, você simplesmente chamará o método fire do objeto de evento passando como parâmetro o próprio evento.
(sua própria classe!)
Do outro lado, você anotou um parâmetro de método @ Observes
e o tipo de parâmetro é o tipo enviado pelo notificador.
Você pode adicionar qualificadores para ser mais preciso em seus eventos. |
Exemplo
O exemplo é bem simples: um ejb usa a anotação @ Schedule
para receber uma notificação a cada segundo.
A cada segundo este EJB enviará a data atual por meio de eventos do CDI.
Este é o nosso código de "negócios". É um comportamento simples (nada).
Em nosso teste (que é considerado como uma extensão) criamos um observador (classe Observer
)
que simplesmente armazena e registra cada data recebida.
O teste em si (EventTest
) simplesmente verifica as datas que foram recebidas.
Conclusão
CDI permite implementar facilmente plugins através deste mecanismo de eventos.
Se você for mais longe e olhar para a API do plugin CDI, perceberá que é simplesmente o mesmo tipo de eventos. Os eventos do CDI são realmente a base do CDI.