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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • use mysql命令_mysql命令-use

    use mysql命令_mysql命令-useuse命令可以让我们来使用数据库。use命令格式:use;例如,如果xhkdb数据库存在,尝试存取它:mysql>usexhkdb;屏幕提示:Databasechanged1)use语句可以通告MySQL把db_name数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到出现下一个不同的use语句:mysql>USEdb1…

    2022年7月17日
    10
  • INT0中断_中断请求寄存器

    INT0中断_中断请求寄存器 当进程执行系统调用时,先调用系统调用库中定义某个函数,该函数通常被展开成前面提到的_syscallN的形式通过INT0x80来陷入核心,其参数也将被通过寄存器传往核心。 在这一部分,我们将介绍INT0x80的处理函数system_call。 思考一下就会发现,在调用前和调用后执行态完全不相同:前者是在用户栈上执行用户态程序,后者在核心栈上执行核心态代码。那么,为了保证在核心内部执行完系统调用…

    2022年9月12日
    0
  • xshell安装步骤_oracle安装sid已在使用

    xshell安装步骤_oracle安装sid已在使用1.安装xhost[root@oracle11~]#yumwhatprovides”*/xhost”Loadedplugins:fastestmirrorLoadingmirrorspeedsfromcachedhostfile*base:mirrors.163.com*extras:mirrors.aliyun.com*updates:mirrors.aliyun.combase/7/x86_64/filelists_db

    2022年9月3日
    2
  • c语言智能车跑道检测程序,基于金属检测的智能循迹小车设计

    c语言智能车跑道检测程序,基于金属检测的智能循迹小车设计杜青乔延华韩淼苗艳华蔡乙男摘要:为解决当前循迹小车存在性能稳定性差的问题,提出一种基于金属检测的智能循迹小车设计方法。采用LDC1000设计一种金属循迹智能小车,介绍系统总体设计框架、硬件设计和软件设计。采用STM32单片机处理LDC1000电感数字转换器采集的路面信息,并通过串口通信将数据传给STC51单片机,由51单片机对数据进行处理,实现对报警、显示及电机驱动模块的控制,…

    2022年6月6日
    50
  • 国外迅雷下载太慢怎么办_迅雷下载宝还能用吗

    国外迅雷下载太慢怎么办_迅雷下载宝还能用吗复制下载链接,用百度网盘离线下载到网盘内,然后从网盘直接下载,速度相当给力

    2022年9月7日
    1
  • ss5客户端设置[通俗易懂]

    ss5客户端设置[通俗易懂]根据ss5服务端参数,对ss5客户端进行配置:ipss5服务所在的服务器主机的IP。port默认是1080,若修改,可以查看ss5服务配置文件:`/etc/sysconfig/ss5`username&password用户名密码,可以查看ss5服务配置文件:`/etc/opt/ss5/ss5.passwd`user1 123456

    2025年7月13日
    1

发表回复

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

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