Using an event bus is definitely the right choice. There are various solutions. You can also check out MBassador https://github.com/bennidi/mbassador .
It is annotation-driven, very lightweight and uses weak references (therefore, it is easy to integrate them in environments where the life cycle of objects is managed using a framework such as spring or guice or somethign). It provides a mechanism for filtering objects and synchronous or asynchronous processing of sending / processing messages. And it is very fast!
Google Guava also has an event bus, but uses strong links that can be sick if you do not have full control over the object's life cycle (for example, the spring environment)
EDIT: I created a comparison of performance and features to select the available event bus implementations, including Guava, MBassador, and some others. The results are quite interesting. Check it out here http://codeblock.engio.net/?p=37
source share