In event-driven architecture, components communicate by sending and receiving events. When something important happens, an event object is created. This event is then published to an event bus, which delivers it to all listeners registered for that event type. Listeners react by running their event handling code. In Spring Boot, you define event classes and listener methods annotated with @EventListener. The flow starts with event creation, then publishing, dispatching, listener invocation, and finally handling completion. Variables like the event object and listeners invoked change state as the event moves through the system. This pattern helps keep parts of the system loosely connected and responsive to changes.