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


相关推荐

  • 内部服务器500错误原因解决方法_网站500服务器内部错误

    内部服务器500错误原因解决方法_网站500服务器内部错误今天网友发一远程协助,重启exchange2013后无法访问管理中心,提示“HTTP500内部服务器错误”,一开始以为是服务的问题,重启IIS仍然报错,后来通过查资料终于把问题解决了,现将整过过程记录下来,供后期遇到同来问题的朋友参考。1、访问出错图:2、解决方法:打开ExchangeManagementShell,运行以下命令禁用邮箱后再启用邮…

    2022年8月11日
    8
  • 怎么html文字下划线,HTML怎么设置下划线?html文字加下划线方法

    怎么html文字下划线,HTML怎么设置下划线?html文字加下划线方法HTML中的下划线曾经是将文本包含在标签中的问题,但是这种方法已被放弃,而更倾向于使用更多功能的CSS。一般来说,下划线被认为是引起人们对文本注意的一种方式,那么HTML怎么设置下划线?html文字加下划线方法?下面我们来总结一下。1.使用“text-decoration”CSS样式属性,使用标签不再是强调文本的正确方法。而是使用“text-decoration”CSS属性,语法为:<sp…

    2022年6月3日
    51
  • sql 存储过程中何时使用declare声明变量[通俗易懂]

    sql 存储过程中何时使用declare声明变量[通俗易懂]这个问题我从百度第二页才找得到答案,就从别人的答案自己仔细研究懂了,顺便整理了过来。原文链接:https://zhidao.baidu.com/question/245490659799230284.html如果把存储过程看作是批处理语句就好理解多了存储过程只不过是一个带着名称的SQL批处理语句,如果在整个过程中需要变量时就是可以声明,但该变量声明后只能存活在批处理(存储过程)的…

    2022年8月20日
    7
  • PHP开发APP接口实现–基本篇

    PHP开发APP接口实现–基本篇

    2021年11月7日
    54
  • c#程序中的AssemblyInfo.cs

    c#程序中的AssemblyInfo.cs在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍//是否符合公共语言规范(CLS)[assembly:CLSCompliant(true)]//控制程序集中所有类型对COM的可访问性[assembly:ComVisible(false)]//代码的作者和这…

    2022年7月13日
    18
  • 部门年终会议如何开_关于召开年度工作总结会议的通知

    部门年终会议如何开_关于召开年度工作总结会议的通知前言:最近有同学问我,部门年终总结会议要不要开,是否有这个必要?那我就说说我的观点,关注我的同学都知道我上月初刚参加完团队的年终总结,我想我应该很有发言权!部门年终总结会议有必要开吗?一、这是否有你的心理?二、那到底要不要开?三、个人感慨!一、这是否有你的心理?每年的年终,不仅个人要写年终总结,团队的leader也要复盘团队一年的工作情况以及来年的展望。很多人都会认为这个无非就是走个形式,给上面的领导看,基本没有任何意义,大家就无非聚集在一起,开个无聊的会,讲完后大家屁股一抬,工作的事全部重来!二

    2022年9月25日
    3

发表回复

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

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