Spring容器结构

  1. 首先得明白流程,我们是在xxx.xml中配置对象的信息,然后在java程序中创建与之绑定的Spring容器,再通过getBean() 获取对应的实例,对象是在Spring容器中已经创建好了,getBean()只是起到了获取的作用
  2. 在xxx.xml中配置了对应类的全路径以便后续通过反射调用生成对象,然后还有配置了一个对应的id,这个id是每个bean对象的唯一标识,后续也是在容器中通过该id找到对应的对象实例。
    ApplicationContext ioc = new ClassPathXmlApplicationContext(“beans.xml”);
  3. 通过上面这个方法创建了一个与beans.xml文件绑定的Spring容器,而,他绑定不是src下的beans.xml,而是out目录下的beans.xml,这个很好证明

在这里插入图片描述
我们可以输出工程的真正运行路径就可以知道了

  1. 由于 该Spring是重量级的(数据量很大),一般我们都是只会创建一个

  2. 使用debug的方式可以看到,ioc容器中有个组件叫beanFactory,xml文件还有对象实例的信息都是放在这个组件里面

  3. beanFactory中有个组件叫beanDefinitionMap,他本质上是一个ConcurrentHashMap,用于存放xml文件中的bean信息,我们在xml文件中配置的对象信息都可以在这里看到,然后,每个bean对象在这个ConcurrentHashMap中都是以Node节点的形式封装保存, 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    格式都是按照node节点的格式来封装
    在这里插入图片描述
    在这里插入图片描述

  4. 在beanFactory中的同级目录下还有一个组件,叫做singletonObjects,他存放着通过xxx.xml生成的单例对象,我们通过getbean()获取到的对象就是在这里查找到的,他也是一个concurrentHashMap,数据也是通过node节点的形式存储,我们创建了2个student01对象,因为它是存放单例对象,所有我们创建的2个student01d对象都是通过同一个node节点映射生成的
    在这里插入图片描述

  5. getbean()的调用流程:首先,他会通过我们填入的xxx值去beanDefinitionMap中寻找与id匹配的数据对象,如果找到了,他就会判断该对象是否是单例对象,如果是,那就会跑到singletonObjects中用那个id值找到与之对应的单例对象,通过它生成对象实例,如果他不是一个单例对象,就会直接生成一个临时的对象返回
    在这里插入图片描述

  6. Spring还提供了一个组件beanDefinitionNames,通过它我们可以更加方便的获取到对应的bean的id,java中也提供了对应的api方便我们获取

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值