@@ -373,8 +373,15 @@ public void registerDisposableBean(String beanName, DisposableBean bean) {
373
373
* @see #registerDependentBean
374
374
*/
375
375
public void registerContainedBean (String containedBeanName , String containingBeanName ) {
376
+ // A quick check for an existing entry upfront, avoiding synchronization...
377
+ Set <String > containedBeans = this .containedBeanMap .get (containingBeanName );
378
+ if (containedBeans != null && containedBeans .contains (containedBeanName )) {
379
+ return ;
380
+ }
381
+
382
+ // No entry yet -> fully synchronized manipulation of the dependentBeans Set
376
383
synchronized (this .containedBeanMap ) {
377
- Set < String > containedBeans = this .containedBeanMap .get (containingBeanName );
384
+ containedBeans = this .containedBeanMap .get (containingBeanName );
378
385
if (containedBeans == null ) {
379
386
containedBeans = new LinkedHashSet <String >(8 );
380
387
this .containedBeanMap .put (containingBeanName , containedBeans );
@@ -391,9 +398,16 @@ public void registerContainedBean(String containedBeanName, String containingBea
391
398
* @param dependentBeanName the name of the dependent bean
392
399
*/
393
400
public void registerDependentBean (String beanName , String dependentBeanName ) {
401
+ // A quick check for an existing entry upfront, avoiding synchronization...
394
402
String canonicalName = canonicalName (beanName );
403
+ Set <String > dependentBeans = this .dependentBeanMap .get (canonicalName );
404
+ if (dependentBeans != null && dependentBeans .contains (dependentBeanName )) {
405
+ return ;
406
+ }
407
+
408
+ // No entry yet -> fully synchronized manipulation of the dependentBeans Set
395
409
synchronized (this .dependentBeanMap ) {
396
- Set < String > dependentBeans = this .dependentBeanMap .get (canonicalName );
410
+ dependentBeans = this .dependentBeanMap .get (canonicalName );
397
411
if (dependentBeans == null ) {
398
412
dependentBeans = new LinkedHashSet <String >(8 );
399
413
this .dependentBeanMap .put (canonicalName , dependentBeans );
@@ -417,7 +431,8 @@ public void registerDependentBean(String beanName, String dependentBeanName) {
417
431
* @param dependentBeanName the name of the dependent bean
418
432
*/
419
433
protected boolean isDependent (String beanName , String dependentBeanName ) {
420
- Set <String > dependentBeans = this .dependentBeanMap .get (beanName );
434
+ String canonicalName = canonicalName (beanName );
435
+ Set <String > dependentBeans = this .dependentBeanMap .get (canonicalName );
421
436
if (dependentBeans == null ) {
422
437
return false ;
423
438
}
0 commit comments