Since you're using Spring, I don't know if you're aware that Spring has its own lightweight event framework. It's used primarily within the framework itself, but it's perfectly usable by application code.
By default, it's synchronous pub/sub, but you can make it asynchronous using an ApplicationEventMulticaster
.