探究spring中如何如何从ioc中拿到对象,ioc中都存了什么

引言

        ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml");
        Monster monster01 = (Monster)ioc.getBean("monster01");

这是我们接触spring时接触的第一行代码,我们只是习惯性的通过ioc.getBean获取我们需要的对象,但是你有没有想过在这个api调用的背后到底发生了什么?现在就让我们一起去解刨一下ioc吧!

bug探究发生了什么

我在创建ioc容器的地方放置了一个断点,但是要在继续往下执行一行才可以看到我们需要的ioc。
image

image
我们看到ioc中有beanFactory,而且beanFactory里存放很多有关beans.xml配置的信息还用单例的类
image

beanDefinitionNames(beanFactory中的)

image

beanDefinitionMap(beanFactory中的)

image

singletonObjects

这里面存的是单例的对象,当getBean时,先去eanDefinitionMap查找,看看是否为单例的,若为单例的就去singletonObjects中获取,若不是单例的就依照配置信息反射生成。
image

ioc结构图

image

posted @ 2024-08-03 20:33  尤所不同  阅读(2)  评论(0编辑  收藏  举报