Spring IOC容器的初始化过程

Spring IOC容器的初始化过程Spring IOC容器的初始化过程

大家好,又见面了,我是你们的朋友全栈君。

Spring IOC容器的初始化过程:

1. BeanDefinition的资源定位

        即Bean定义的资源的定位,由ResourceLoader通过Resource接口实现,类似于容器寻找数据的过程,Spring提供了提供了不同的Resouce读取器,如FileSystemXMLApplicationContext提供了充文件系统载入,ClassPathXmlApplicationContext可以从Class Path中载入,XmlWebApplicationContext可以在Web容器中载入等。通过以FileSystemXMLApplicationContext为例,getResourceByPath,调用refreshFactory()启动调用,

2.BeanDefinition资源载入

       即把用户定义好的bean转化成IOC容器内部的数据结构(即BeanDifinition),即POJO对象在IoC容器中的抽象;以FileSystemXMLApplicationContext为例,AbstractApplicationContext调用refresh接口,然后调用DefaultListableFactory的loadBeanDefinitions方法初始化XmlBeanDefinitionReader,然后解析xml文件完成BeanDefinition载入到Ioc容器中。

3. 注册BeanDifinition

 
     即向IoC容器注册BeanDifinition,通过调用BeanDefinitionRegistry接口的registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException方法来实现。Bean资源载入IoC容器后,Bean的信息已经在IoC容器中构建了数据结构和数据存储,但是这些数据还不能够提供给IoC容器直接使用,需要进行注册之后才能够检索和使用。简而言之,在IoC容器将BeanDefinition存入到一个HashMap(DefaultListableBeanFactory属性的Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256),256是初始化容量)中,通过这个HashMap来维护这些Bean。注册的过程是使用Synchronized代码块,来保证数据的一致性,Map<String, BeanDefinition> beanDefinitionMap中的key为beanName,如果有重复的beanName,则抛出异常。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149537.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • biting的意思_什么是bit

    biting的意思_什么是bitCM3的存储器系统支持所谓的“位带”(bit-band)操作。通过它,实现了对单一比特的原子操作。位带操作仅适用于一些特殊的存储器区域中。 位带区与位带别名区的膨胀关系图      在位带区中,每个比特都映射到别名地址区的一个字——这是个只有LSB才有效的字。 支持位带操作的两个内存区的范围是:0x200

    2022年10月13日
    0
  • tar 打包的时候如何去掉目录前缀

    tar 打包的时候如何去掉目录前缀文章转载自:freefly的博客,对原作者表示感谢。问题:tarczfxx.tgz/xxx/xxx/A然后希望xx.tgz或xx.tar.gz里面就直接A这个目录不希望加前导xxx/xxx,我知道可以先cp这个目录到同一个目录再打包,不过想知道可以不可以不用另外cp到同一个目录 答案1:使用-C指定相对路径,如:tarczfx

    2022年5月6日
    77
  • systemproperties_安卓system下载

    systemproperties_安卓system下载该楼层疑似违规已被系统折叠隐藏此楼查看此楼android状态栏点击右上角锁屏教程1.反编辑systemUI.apk2.打开res\layout的status_bar.xml3.查找字符这段代码的上面一行加入以下代码android:layout_gravity=”right”androidrientation=”vertical”android:id=”@id/home”android:lay…

    2022年9月18日
    0
  • Nginx部署Vue项目以及解决刷新页面404问题「建议收藏」

    Nginx部署Vue项目以及解决刷新页面404问题

    2022年2月18日
    42
  • C#点餐系统_点餐系统数据库设计

    C#点餐系统_点餐系统数据库设计一.编程思想1.首先考虑需要什么样的界面;2.界面中需要用到的控件,以及控件的简单设置;3.在不需要按钮控件的情况下,点击会生成按钮的实现;4.通过点击后生成的菜品统计以及价格的自动计算;二.编程核心1.获取控件中的内容;2.添加按钮点击事件;3.对控件中的内容封装传递后并在下一步取出;4.label控件和button控件的生成;5.主要用到了foreach进行遍历;三.实现……

    2022年9月7日
    0
  • JS乘法口诀表(一行代码)「建议收藏」

    JS乘法口诀表(一行代码)

    2022年1月25日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号