栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring容器结构

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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方便我们获取

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号