spring的IOC全程解析

本文详细介绍了Spring框架中的IOC(Inverse of Control)过程,包括配置文件的定位、解析及BeanFactory的创建等关键步骤。通过实例解释了外部Bean与内部Bean的区别,并阐述了BeanDefinition与Bean定义之间的对应关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先什么是spring的Ioc过程呢,如下代码所示:

ApplicationContext applicationContext = new ClasspathXmlApplicationContext("applicationContext.xml");

这条语句执行完毕,我们就说spring的IOC过程结束了,以为这你可以通过applicationContext随心所欲的获取你在配置文件中定义的各种Bean并加以使用。因此spring的IOC过程包括配置文件的定位、解析、加载,BeanFatory的创建等一系列过程。本文首先介绍IOC过程,然后对每个阶段进行详细介绍。流程图如下所示:
这里写图片描述

定位配置文件

spring定位配置文件的逻辑如下图所示:
这里写图片描述

解析配置文件

spring的ApplicationContext定位到配置文件以后,接下来便会解析配置文件。spring解析XML配置采用的是JDK的自带的DOM api来解析的,每解析一个Element标签,便会调用的相应的类来处理,那么标签和类之间的映射关系是如何对应上的呢?这个主要是由spring.handlers文件决决定,文件样式如图所示:

    http\://www.springframework.org/schema/c=org.springframework.beans.factory.xml.SimpleConstructorNamespaceHandler
http\://www.springframework.org/schema/p=org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler
http\://www.springframework.org/schema/util=org.springframework.beans.factory.xml.UtilNamespaceHandler

spring是通过标签找到对应的URL,由URL找到对应的处理类,然后在这些处理类中将所有的标签解析成一个个BeanDefinition。在spring的应用程序中,默认的BeanDefinition实现类型是GenericBeanDefinition。在介绍Bean定义的属性和BeanDefinition对应之前,首要要介绍一下有哪些因素可以影响一个Bean的属性值,而要想介绍清楚这一点,首要要明白一个Bean按照作用域来划分,可以分为外部Bean和内部Bean,如下所示:

<beans>
    <bean id=“firstBean” class=“org.ioc.FirstBean”>   <!—外部Bean— >
       <property name=“secondBean”>
              <bean class=“org.ioc.SecondBean”/>      <!— 内部Bean —>
       </property>
   </bean>
</beans>

如果一个Bean是外部Bean,那么影响他属性值的因素包括parentBean,标签中定义的Bean。如果一个Ban是内部Bean,影响他属性值的因素包括外部Bean。而且优先级都是自定义的属性值要高于parentBean或者外部Bean,但有一个例外,那就是内部Bean的scope属性,外部Bean的scope属性优先级要高于内部Bean的优先级,不难理解这是出于线程安全因素考虑。下面我们来阐述BeanDefinition和Bean定义之间的对应关系,如下表所示:原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值