面试:spring ioc实现原理

加载容器创建resource对象

首先加载一个spring的容器beanfactory,beanfactory的构造方法会创建一个实现了resource接口实例对象。resource对象通过setconfiguration()方法设置spring配置文件位置。resource对象有三种实现
分别是fileresource,url resource,classpathresource。分别获取文件,网络资源,项目路径下资源。

resource对象加载完成后,通过一个super关键字创建容器。如果有父类容器,会使用父类容器。否则新建一个容器。

提取验证模式

容器创建完成后,开始加载配置文件。beanfactory通过一个getinputstream方法拿到配置文件的输入流。在加载之前,需要验证xml的正确性和验证模式。通过解析配置的头标签。采用DTD或者xsd模式
(DTD使用其他规范或xsd(xml语法))如果不是DTD就使用xsd。

提取信息

将配置文件的信息转化为document对象。document对象负责将类信息转化为spring的特殊结构beandefintion.beandefination会保存bean的属性,是否懒加载,是否单例,是否抽象类,是否私有类等

注册

将收集到的所有bean存到一个currenthashmap中,用beanname做key,beandefintion作为value。 如果有相同的key值,并且spring不允许重名。就抛出异常。否则覆盖原来的对象

    原文作者:木木甫
    原文地址: https://segmentfault.com/a/1190000016667647
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞