引言
ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
Monster monster01 = (Monster)ioc.getBean("monster01");
这是我们接触spring时接触的第一行代码,我们只是习惯性的通过ioc.getBean获取我们需要的对象,但是你有没有想过在这个api调用的背后到底发生了什么?现在就让我们一起去解刨一下ioc吧!
bug探究发生了什么
我在创建ioc容器的地方放置了一个断点,但是要在继续往下执行一行才可以看到我们需要的ioc。
我们看到ioc中有beanFactory,而且beanFactory里存放很多有关beans.xml配置的信息还用单例的类
beanDefinitionNames(beanFactory中的)
beanDefinitionMap(beanFactory中的)
singletonObjects
这里面存的是单例的对象,当getBean时,先去eanDefinitionMap查找,看看是否为单例的,若为单例的就去singletonObjects中获取,若不是单例的就依照配置信息反射生成。