@ -133,6 +133,11 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -133,6 +133,11 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@ -156,8 +161,8 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -156,8 +161,8 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
/** Optional id for this factory, for serialization purposes. */
private@NullableStringserializationId;
@ -208,6 +213,8 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -208,6 +213,8 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@ -1030,7 +1037,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -1030,7 +1037,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
}
}
else{
// Bean intended to be initialized in main bootstrap thread
// Bean intended to be initialized in main bootstrap thread.
thrownewBeanCurrentlyInCreationException(beanName,"Bean marked for mainline initialization "+
"but requested in background thread - enforce early instantiation in mainline thread "+
@ -1041,8 +1048,28 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -1041,8 +1048,28 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
// An unmanaged thread (assumed to be application-internal) with lenient locking,
// and not part of the same thread pool that provided the main bootstrap thread
// (excluding scenarios where we are hit by multiple external bootstrap threads).
returntrue;
}
}
// Traditional behavior: forced to always hold a full lock.
returnnull;
}
@Override
@ -1060,6 +1087,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -1060,6 +1087,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@ -1072,6 +1100,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -1072,6 +1100,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
}
}
finally{
this.mainThreadPrefix=null;
this.preInstantiationThread.remove();
this.preInstantiationPhase=false;
}
@ -1166,6 +1195,12 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@@ -1166,6 +1195,12 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto
@ -270,7 +270,7 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements
@@ -270,7 +270,7 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements
// Thread-safe exposure is still guaranteed, there is just a risk of collisions
// when triggering creation of other beans as dependencies of the current bean.
if(logger.isInfoEnabled()){
logger.info("Creating singleton bean '"+beanName+"' in thread \""+
logger.info("Obtaining singleton bean '"+beanName+"' in thread \""+
Thread.currentThread().getName()+"\" while other thread holds "+
"singleton lock for other beans "+this.singletonsCurrentlyInCreation);
}
@ -441,12 +441,16 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements
@@ -441,12 +441,16 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements