哈哈,原来IOC容器的bean是存在DefaultSingletonBeanRegistry的一个Map类型的属性当中。
经过查看源代码发现IOC容器中的bean实例(不知道是不是所有的bean)是存储在一个DefaultSingletonBeanRegistry类实例的一个Map类型的属性当中。
下面是DefaultSingletonBeanRegistry类的定义:
//类定义
public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {
下面是这个类中的一个属性:
/** Cache of singleton objects: bean name --> bean instance */ //生成的bean将存储在这个属性中。初始容量为256的Map对象。 private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);
下面是DefaultSingletonBeanRegistry类的一个方法,这个方法添加bean实例到一个Map属性中。
/** * Add the given singleton object to the singleton cache of this factory. * <p>To be called for eager registration of singletons. * @param beanName the name of the bean // * @param singletonObject the singleton object */ protected void addSingleton(String beanName, Object singletonObject) { synchronized (this.singletonObjects) { //singletonObjects 是DefaultSingletonBeanRegistry类的一个Map类型的字段。把bean实例都添加到了Map对象中。 this.singletonObjects.put(beanName, (singletonObject != null ? singletonObject : NULL_OBJECT)); this.singletonFactories.remove(beanName); this.earlySingletonObjects.remove(beanName); this.registeredSingletons.add(beanName); } }