@@ -972,59 +972,54 @@ protected Object getEarlyBeanReference(String beanName, RootBeanDefinition mbd,
972
972
*/
973
973
@ Nullable
974
974
private FactoryBean <?> getSingletonFactoryBeanForTypeCheck (String beanName , RootBeanDefinition mbd ) {
975
- synchronized (getSingletonMutex ()) {
976
- BeanWrapper bw = this .factoryBeanInstanceCache .get (beanName );
977
- if (bw != null ) {
978
- return (FactoryBean <?>) bw .getWrappedInstance ();
979
- }
980
- Object beanInstance = getSingleton (beanName , false );
981
- if (beanInstance instanceof FactoryBean <?> factoryBean ) {
982
- return factoryBean ;
983
- }
984
- if (isSingletonCurrentlyInCreation (beanName ) ||
985
- (mbd .getFactoryBeanName () != null && isSingletonCurrentlyInCreation (mbd .getFactoryBeanName ()))) {
986
- return null ;
987
- }
975
+ BeanWrapper bw = this .factoryBeanInstanceCache .get (beanName );
976
+ if (bw != null ) {
977
+ return (FactoryBean <?>) bw .getWrappedInstance ();
978
+ }
979
+ Object beanInstance = getSingleton (beanName , false );
980
+ if (beanInstance instanceof FactoryBean <?> factoryBean ) {
981
+ return factoryBean ;
982
+ }
983
+ if (isSingletonCurrentlyInCreation (beanName ) ||
984
+ (mbd .getFactoryBeanName () != null && isSingletonCurrentlyInCreation (mbd .getFactoryBeanName ()))) {
985
+ return null ;
986
+ }
988
987
989
- Object instance ;
990
- try {
991
- // Mark this bean as currently in creation, even if just partially.
992
- beforeSingletonCreation (beanName );
993
- // Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
994
- instance = resolveBeforeInstantiation (beanName , mbd );
995
- if (instance == null ) {
996
- bw = createBeanInstance (beanName , mbd , null );
997
- instance = bw .getWrappedInstance ();
998
- }
988
+ Object instance ;
989
+ try {
990
+ // Mark this bean as currently in creation, even if just partially.
991
+ beforeSingletonCreation (beanName );
992
+ // Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
993
+ instance = resolveBeforeInstantiation (beanName , mbd );
994
+ if (instance == null ) {
995
+ bw = createBeanInstance (beanName , mbd , null );
996
+ instance = bw .getWrappedInstance ();
997
+ this . factoryBeanInstanceCache . put ( beanName , bw );
999
998
}
1000
- catch (UnsatisfiedDependencyException ex ) {
1001
- // Don't swallow, probably misconfiguration...
999
+ }
1000
+ catch (UnsatisfiedDependencyException ex ) {
1001
+ // Don't swallow, probably misconfiguration...
1002
+ throw ex ;
1003
+ }
1004
+ catch (BeanCreationException ex ) {
1005
+ // Don't swallow a linkage error since it contains a full stacktrace on
1006
+ // first occurrence... and just a plain NoClassDefFoundError afterwards.
1007
+ if (ex .contains (LinkageError .class )) {
1002
1008
throw ex ;
1003
1009
}
1004
- catch (BeanCreationException ex ) {
1005
- // Don't swallow a linkage error since it contains a full stacktrace on
1006
- // first occurrence... and just a plain NoClassDefFoundError afterwards.
1007
- if (ex .contains (LinkageError .class )) {
1008
- throw ex ;
1009
- }
1010
- // Instantiation failure, maybe too early...
1011
- if (logger .isDebugEnabled ()) {
1012
- logger .debug ("Bean creation exception on singleton FactoryBean type check: " + ex );
1013
- }
1014
- onSuppressedException (ex );
1015
- return null ;
1016
- }
1017
- finally {
1018
- // Finished partial creation of this bean.
1019
- afterSingletonCreation (beanName );
1020
- }
1021
-
1022
- FactoryBean <?> fb = getFactoryBean (beanName , instance );
1023
- if (bw != null ) {
1024
- this .factoryBeanInstanceCache .put (beanName , bw );
1010
+ // Instantiation failure, maybe too early...
1011
+ if (logger .isDebugEnabled ()) {
1012
+ logger .debug ("Bean creation exception on singleton FactoryBean type check: " + ex );
1025
1013
}
1026
- return fb ;
1014
+ onSuppressedException (ex );
1015
+ return null ;
1016
+ }
1017
+ finally {
1018
+ // Finished partial creation of this bean.
1019
+ afterSingletonCreation (beanName );
1027
1020
}
1021
+
1022
+ return getFactoryBean (beanName , instance );
1028
1023
}
1029
1024
1030
1025
/**
@@ -1912,21 +1907,17 @@ protected Object postProcessObjectFromFactoryBean(Object object, String beanName
1912
1907
*/
1913
1908
@ Override
1914
1909
protected void removeSingleton (String beanName ) {
1915
- synchronized (getSingletonMutex ()) {
1916
- super .removeSingleton (beanName );
1917
- this .factoryBeanInstanceCache .remove (beanName );
1918
- }
1910
+ super .removeSingleton (beanName );
1911
+ this .factoryBeanInstanceCache .remove (beanName );
1919
1912
}
1920
1913
1921
1914
/**
1922
1915
* Overridden to clear FactoryBean instance cache as well.
1923
1916
*/
1924
1917
@ Override
1925
1918
protected void clearSingletonCache () {
1926
- synchronized (getSingletonMutex ()) {
1927
- super .clearSingletonCache ();
1928
- this .factoryBeanInstanceCache .clear ();
1929
- }
1919
+ super .clearSingletonCache ();
1920
+ this .factoryBeanInstanceCache .clear ();
1930
1921
}
1931
1922
1932
1923
/**
0 commit comments