|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.google.common.eventbus.EventBus
@Beta public class EventBus
Dispatches events to listeners, and provides ways for listeners to register themselves.
The EventBus allows publish-subscribe-style communication between components without requiring the components to explicitly register with one another (and thus be aware of each other). It is designed exclusively to replace traditional Java in-process event distribution using explicit registration. It is not a general-purpose publish-subscribe system, nor is it intended for interprocess communication.
Subscribe
annotation;register(Object)
method.
post(Object)
method. The EventBus instance will determine the type
of event and route it to all registered listeners.
Events are routed based on their type — an event will be delivered to any handler for any type to which the event is assignable. This includes implemented interfaces, all superclasses, and all interfaces implemented by superclasses.
When post
is called, all registered handlers for an event are run
in sequence, so handlers should be reasonably quick. If an event may trigger
an extended process (such as a database load), spawn a thread or queue it for
later. (For a convenient way to do this, use an AsyncEventBus
.)
Handlers should not, in general, throw. If they do, the EventBus will catch and log the exception. This is rarely the right solution for error handling and should not be relied upon; it is intended solely to help find problems during development.
The EventBus guarantees that it will not call a handler method from
multiple threads simultaneously, unless the method explicitly allows it by
bearing the AllowConcurrentEvents
annotation. If this annotation is
not present, handler methods need not worry about being reentrant, unless
also called from outside the EventBus.
DeadEvent
and reposted.
If a handler for a supertype of all events (such as Object) is registered,
no event will ever be considered dead, and no DeadEvents will be generated.
Accordingly, while DeadEvent extends Object
, a handler registered to
receive any Object will never receive a DeadEvent.
This class is safe for concurrent use.
Constructor Summary | |
---|---|
EventBus()
Creates a new EventBus named "default". |
|
EventBus(String identifier)
Creates a new EventBus with the given identifier . |
Method Summary | |
---|---|
protected void |
dispatch(Object event,
com.google.common.eventbus.EventHandler wrapper)
Dispatches event to the handler in wrapper . |
protected void |
dispatchQueuedEvents()
Drain the queue of events to be dispatched. |
protected void |
enqueueEvent(Object event,
com.google.common.eventbus.EventHandler handler)
Queue the event for dispatch during
dispatchQueuedEvents() . |
protected Set<com.google.common.eventbus.EventHandler> |
newHandlerSet()
Creates a new Set for insertion into the handler map. |
void |
post(Object event)
Posts an event to all registered handlers. |
void |
register(Object object)
Registers all handler methods on object to receive events. |
void |
unregister(Object object)
Unregisters all handler methods on a registered object . |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public EventBus()
public EventBus(String identifier)
identifier
.
identifier
- a brief name for this bus, for logging purposes. Should
be a valid Java identifier.Method Detail |
---|
public void register(Object object)
object
to receive events.
Handler methods are selected and classified using this EventBus's
HandlerFindingStrategy
; the default strategy is the
AnnotatedHandlerFinder
.
object
- object whose handler methods should be registered.public void unregister(Object object)
object
.
object
- object whose handler methods should be unregistered.
IllegalArgumentException
- if the object was not previously registered.public void post(Object event)
If no handlers have been subscribed for event
's class, and
event
is not already a DeadEvent
, it will be wrapped in a
DeadEvent and reposted.
event
- event to post.protected void enqueueEvent(Object event, com.google.common.eventbus.EventHandler handler)
event
for dispatch during
dispatchQueuedEvents()
. Events are queued in-order of occurrence
so they can be dispatched in the same order.
protected void dispatchQueuedEvents()
protected void dispatch(Object event, com.google.common.eventbus.EventHandler wrapper)
event
to the handler in wrapper
. This method
is an appropriate override point for subclasses that wish to make
event delivery asynchronous.
event
- event to dispatch.wrapper
- wrapper that will call the handler.protected Set<com.google.common.eventbus.EventHandler> newHandlerSet()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |