|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2019 the original author or authors. |
|
|
|
* Copyright 2002-2020 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -70,6 +70,10 @@ import org.springframework.util.StringUtils; |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry { |
|
|
|
public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Maximum number of suppressed exceptions to preserve. */ |
|
|
|
|
|
|
|
private static final int SUPPRESSED_EXCEPTIONS_LIMIT = 100; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Cache of singleton objects: bean name to bean instance. */ |
|
|
|
/** Cache of singleton objects: bean name to bean instance. */ |
|
|
|
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); |
|
|
|
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); |
|
|
|
|
|
|
|
|
|
|
|
@ -90,7 +94,7 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements |
|
|
|
private final Set<String> inCreationCheckExclusions = |
|
|
|
private final Set<String> inCreationCheckExclusions = |
|
|
|
Collections.newSetFromMap(new ConcurrentHashMap<>(16)); |
|
|
|
Collections.newSetFromMap(new ConcurrentHashMap<>(16)); |
|
|
|
|
|
|
|
|
|
|
|
/** List of suppressed Exceptions, available for associating related causes. */ |
|
|
|
/** Collection of suppressed Exceptions, available for associating related causes. */ |
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
private Set<Exception> suppressedExceptions; |
|
|
|
private Set<Exception> suppressedExceptions; |
|
|
|
|
|
|
|
|
|
|
|
@ -253,13 +257,17 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Register an Exception that happened to get suppressed during the creation of a |
|
|
|
* Register an exception that happened to get suppressed during the creation of a |
|
|
|
* singleton bean instance, e.g. a temporary circular reference resolution problem. |
|
|
|
* singleton bean instance, e.g. a temporary circular reference resolution problem. |
|
|
|
|
|
|
|
* <p>The default implementation preserves any given exception in this registry's |
|
|
|
|
|
|
|
* collection of suppressed exceptions, up to a limit of 100 exceptions, adding |
|
|
|
|
|
|
|
* them as related causes to an eventual top-level {@link BeanCreationException}. |
|
|
|
* @param ex the Exception to register |
|
|
|
* @param ex the Exception to register |
|
|
|
|
|
|
|
* @see BeanCreationException#getRelatedCauses() |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
protected void onSuppressedException(Exception ex) { |
|
|
|
protected void onSuppressedException(Exception ex) { |
|
|
|
synchronized (this.singletonObjects) { |
|
|
|
synchronized (this.singletonObjects) { |
|
|
|
if (this.suppressedExceptions != null) { |
|
|
|
if (this.suppressedExceptions != null && this.suppressedExceptions.size() < SUPPRESSED_EXCEPTIONS_LIMIT) { |
|
|
|
this.suppressedExceptions.add(ex); |
|
|
|
this.suppressedExceptions.add(ex); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|