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,则抛出异常。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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