// 用于内部标记的空的单例对象(不支持null)
protected static final Object NULL_OBJECT = new Object();
// 缓存单例对象根据beanName
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);

// 早期缓存单例对象的Factory根据beanName
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16);

// 早期Factory制造的单例对象缓存
private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16);

// Registry单例对象的beanName表单
private final Set<String> registeredSingletons = new LinkedHashSet<String>(256);

// 当前正在创造的单例beanName
private final Set<String> singletonsCurrentlyInCreation = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>(16));

// 排除当前正在创建beanName
private final Set<String> inCreationCheckExclusions = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>(16));

// 被抑制的异常列表,可用于相关联的原因
private Set<Exception> suppressedExceptions;

// 标记,指示我们目前在销毁单例对象
private boolean singletonsCurrentlyInDestruction = false;

// 一次性使用的单例<beanName:instance>
private final Map<String, Object> disposableBeans = new LinkedHashMap<String, Object>();

// beanName含有的names
private final Map<String, Set<String>> containedBeanMap = new ConcurrentHashMap<String, Set<String>>(16);

// beanName含有的依赖names
private final Map<String, Set<String>> dependentBeanMap = new ConcurrentHashMap<String, Set<String>>(64);

// beanName含有的依靠names
private final Map<String, Set<String>> dependenciesForBeanMap = new ConcurrentHashMap<String, Set<String>>(64);

// 注册单例根据beanName
registerSingleton(String beanName, Object singletonObject)
1. 判断beanName是否为空
2. 同步存储单例的singletonObjects