@@ -157,7 +157,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp
157
157
158
158
/** Cache of pre-filtered post-processors. */
159
159
@ Nullable
160
- private volatile BeanPostProcessorCache beanPostProcessorCache ;
160
+ private BeanPostProcessorCache beanPostProcessorCache ;
161
161
162
162
/** Map from scope identifier String to corresponding Scope. */
163
163
private final Map <String , Scope > scopes = new LinkedHashMap <>(8 );
@@ -926,10 +926,12 @@ public String resolveEmbeddedValue(@Nullable String value) {
926
926
@ Override
927
927
public void addBeanPostProcessor (BeanPostProcessor beanPostProcessor ) {
928
928
Assert .notNull (beanPostProcessor , "BeanPostProcessor must not be null" );
929
- // Remove from old position, if any
930
- this .beanPostProcessors .remove (beanPostProcessor );
931
- // Add to end of list
932
- this .beanPostProcessors .add (beanPostProcessor );
929
+ synchronized (this .beanPostProcessors ) {
930
+ // Remove from old position, if any
931
+ this .beanPostProcessors .remove (beanPostProcessor );
932
+ // Add to end of list
933
+ this .beanPostProcessors .add (beanPostProcessor );
934
+ }
933
935
}
934
936
935
937
/**
@@ -939,8 +941,12 @@ public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
939
941
* @see #addBeanPostProcessor
940
942
*/
941
943
public void addBeanPostProcessors (Collection <? extends BeanPostProcessor > beanPostProcessors ) {
942
- this .beanPostProcessors .removeAll (beanPostProcessors );
943
- this .beanPostProcessors .addAll (beanPostProcessors );
944
+ synchronized (this .beanPostProcessors ) {
945
+ // Remove from old position, if any
946
+ this .beanPostProcessors .removeAll (beanPostProcessors );
947
+ // Add to end of list
948
+ this .beanPostProcessors .addAll (beanPostProcessors );
949
+ }
944
950
}
945
951
946
952
@ Override
@@ -962,26 +968,34 @@ public List<BeanPostProcessor> getBeanPostProcessors() {
962
968
* @since 5.3
963
969
*/
964
970
BeanPostProcessorCache getBeanPostProcessorCache () {
965
- BeanPostProcessorCache bppCache = this .beanPostProcessorCache ;
966
- if (bppCache == null ) {
967
- bppCache = new BeanPostProcessorCache ();
968
- for (BeanPostProcessor bpp : this .beanPostProcessors ) {
969
- if (bpp instanceof InstantiationAwareBeanPostProcessor instantiationAwareBpp ) {
970
- bppCache .instantiationAware .add (instantiationAwareBpp );
971
- if (bpp instanceof SmartInstantiationAwareBeanPostProcessor smartInstantiationAwareBpp ) {
972
- bppCache .smartInstantiationAware .add (smartInstantiationAwareBpp );
971
+ synchronized (this .beanPostProcessors ) {
972
+ BeanPostProcessorCache bppCache = this .beanPostProcessorCache ;
973
+ if (bppCache == null ) {
974
+ bppCache = new BeanPostProcessorCache ();
975
+ for (BeanPostProcessor bpp : this .beanPostProcessors ) {
976
+ if (bpp instanceof InstantiationAwareBeanPostProcessor instantiationAwareBpp ) {
977
+ bppCache .instantiationAware .add (instantiationAwareBpp );
978
+ if (bpp instanceof SmartInstantiationAwareBeanPostProcessor smartInstantiationAwareBpp ) {
979
+ bppCache .smartInstantiationAware .add (smartInstantiationAwareBpp );
980
+ }
981
+ }
982
+ if (bpp instanceof DestructionAwareBeanPostProcessor destructionAwareBpp ) {
983
+ bppCache .destructionAware .add (destructionAwareBpp );
984
+ }
985
+ if (bpp instanceof MergedBeanDefinitionPostProcessor mergedBeanDefBpp ) {
986
+ bppCache .mergedDefinition .add (mergedBeanDefBpp );
973
987
}
974
988
}
975
- if (bpp instanceof DestructionAwareBeanPostProcessor destructionAwareBpp ) {
976
- bppCache .destructionAware .add (destructionAwareBpp );
977
- }
978
- if (bpp instanceof MergedBeanDefinitionPostProcessor mergedBeanDefBpp ) {
979
- bppCache .mergedDefinition .add (mergedBeanDefBpp );
980
- }
989
+ this .beanPostProcessorCache = bppCache ;
981
990
}
982
- this .beanPostProcessorCache = bppCache ;
991
+ return bppCache ;
992
+ }
993
+ }
994
+
995
+ private void resetBeanPostProcessorCache () {
996
+ synchronized (this .beanPostProcessors ) {
997
+ this .beanPostProcessorCache = null ;
983
998
}
984
- return bppCache ;
985
999
}
986
1000
987
1001
/**
@@ -1937,35 +1951,35 @@ private class BeanPostProcessorCacheAwareList extends CopyOnWriteArrayList<BeanP
1937
1951
@ Override
1938
1952
public BeanPostProcessor set (int index , BeanPostProcessor element ) {
1939
1953
BeanPostProcessor result = super .set (index , element );
1940
- beanPostProcessorCache = null ;
1954
+ resetBeanPostProcessorCache () ;
1941
1955
return result ;
1942
1956
}
1943
1957
1944
1958
@ Override
1945
1959
public boolean add (BeanPostProcessor o ) {
1946
1960
boolean success = super .add (o );
1947
- beanPostProcessorCache = null ;
1961
+ resetBeanPostProcessorCache () ;
1948
1962
return success ;
1949
1963
}
1950
1964
1951
1965
@ Override
1952
1966
public void add (int index , BeanPostProcessor element ) {
1953
1967
super .add (index , element );
1954
- beanPostProcessorCache = null ;
1968
+ resetBeanPostProcessorCache () ;
1955
1969
}
1956
1970
1957
1971
@ Override
1958
1972
public BeanPostProcessor remove (int index ) {
1959
1973
BeanPostProcessor result = super .remove (index );
1960
- beanPostProcessorCache = null ;
1974
+ resetBeanPostProcessorCache () ;
1961
1975
return result ;
1962
1976
}
1963
1977
1964
1978
@ Override
1965
1979
public boolean remove (Object o ) {
1966
1980
boolean success = super .remove (o );
1967
1981
if (success ) {
1968
- beanPostProcessorCache = null ;
1982
+ resetBeanPostProcessorCache () ;
1969
1983
}
1970
1984
return success ;
1971
1985
}
@@ -1974,7 +1988,7 @@ public boolean remove(Object o) {
1974
1988
public boolean removeAll (Collection <?> c ) {
1975
1989
boolean success = super .removeAll (c );
1976
1990
if (success ) {
1977
- beanPostProcessorCache = null ;
1991
+ resetBeanPostProcessorCache () ;
1978
1992
}
1979
1993
return success ;
1980
1994
}
@@ -1983,7 +1997,7 @@ public boolean removeAll(Collection<?> c) {
1983
1997
public boolean retainAll (Collection <?> c ) {
1984
1998
boolean success = super .retainAll (c );
1985
1999
if (success ) {
1986
- beanPostProcessorCache = null ;
2000
+ resetBeanPostProcessorCache () ;
1987
2001
}
1988
2002
return success ;
1989
2003
}
@@ -1992,7 +2006,7 @@ public boolean retainAll(Collection<?> c) {
1992
2006
public boolean addAll (Collection <? extends BeanPostProcessor > c ) {
1993
2007
boolean success = super .addAll (c );
1994
2008
if (success ) {
1995
- beanPostProcessorCache = null ;
2009
+ resetBeanPostProcessorCache () ;
1996
2010
}
1997
2011
return success ;
1998
2012
}
@@ -2001,7 +2015,7 @@ public boolean addAll(Collection<? extends BeanPostProcessor> c) {
2001
2015
public boolean addAll (int index , Collection <? extends BeanPostProcessor > c ) {
2002
2016
boolean success = super .addAll (index , c );
2003
2017
if (success ) {
2004
- beanPostProcessorCache = null ;
2018
+ resetBeanPostProcessorCache () ;
2005
2019
}
2006
2020
return success ;
2007
2021
}
@@ -2010,15 +2024,15 @@ public boolean addAll(int index, Collection<? extends BeanPostProcessor> c) {
2010
2024
public boolean removeIf (Predicate <? super BeanPostProcessor > filter ) {
2011
2025
boolean success = super .removeIf (filter );
2012
2026
if (success ) {
2013
- beanPostProcessorCache = null ;
2027
+ resetBeanPostProcessorCache () ;
2014
2028
}
2015
2029
return success ;
2016
2030
}
2017
2031
2018
2032
@ Override
2019
2033
public void replaceAll (UnaryOperator <BeanPostProcessor > operator ) {
2020
2034
super .replaceAll (operator );
2021
- beanPostProcessorCache = null ;
2035
+ resetBeanPostProcessorCache () ;
2022
2036
}
2023
2037
}
2024
2038
0 commit comments