As of 6.2, lenient locking may lead to BeanCurrentlyInCreationException on pre-instantiation if another thread has picked up this bean outside of a singleton lock already. While this should never happen in a well-designed bootstrap arrangement where common beans are supposed to come first (through depends-on declaration in dependent beans even for async initialization needs), we can safely ignore a top-level BeanCurrentlyInCreationException on mainline pre-instantiation (in the main bootstrap thread) and move on. Effectively, the skipped bean is expected to concurrently finish its initialization in its other thread while the main thread continues with initializing the rest of the non-lazy singleton beans.

Comment From: jhoeller

This has been revised for an additional measure: Encountering a BeanCurrentlyInCreationException in the mainline bootstrap thread, we check whether the affected bean is currently in lenient creation and correspondingly wait for its creation finishing. This works for top-level beans as well as transitively referenced beans, largely restoring the behavior for unmanaged initialization as we had it in 6.1.x without fully enforcing the common singleton lock in all threads.