Even with lazy init you would still have this problem.
If you don't have the listener, how will your application still be able to run. What if it still isn't up when a user needs it?
You could do some tricks, like parent child application contexts. Where you put yours listener into its own application context. When you create it in code, wrap it in a try-catch. Maybe even run that code in a separate
thread that keeps running every 10 minutes until the listener is up, then after that application context is created stop running that job. And pass the other application context to the constructor to be the parent. Now it might need to be reversed because child application contexts can see beans in the parent, but not the other way around.
There might be another solution that I am not aware of.
Mark