没有合适的资源?快使用搜索试试~ 我知道了~
IOC容器初始化过程
5星 · 超过95%的资源 1 下载量 9 浏览量
2021-01-27
12:30:37
上传
评论
收藏 67KB PDF 举报
温馨提示
试读
3页
IOC容器的初始化分为三个过程实现:第一个过程是Resource资源定位。这个Resouce指的是BeanDefinition的资源定位。这个过程就是容器找数据的过程,就像水桶装水需要先找到水一样。 第二个过程是BeanDefinition的载入过程。这个载入过程是把用户定义好的Bean表示成Ioc容器内部的数据结构,而这个容器内部的数据结构就是BeanDefition。 第三个过程是向IOC容器注册这些BeanDefinition的过程,这个过程就是将前面的BeanDefit
资源推荐
资源详情
资源评论
IOC容器初始化过程容器初始化过程
IOC容器的初始化分为三个过程实现:
第一个过程是Resource资源定位。这个Resouce指的是BeanDefinition的资源定位。这个过程就是容器找数据的过程,就像水
桶装水需要先找到水一样。
第二个过程是BeanDefinition的载入过程。这个载入过程是把用户定义好的Bean表示成Ioc容器内部的数据结构,而这个容器
内部的数据结构就是BeanDefition。
第三个过程是向IOC容器注册这些BeanDefinition的过程,这个过程就是将前面的BeanDefition保存到HashMap中的过程。
上面提到的过程一般是不包括Bean的依赖注入的实现。在Spring中,Bean的载入和依赖注入是两个独立的过程。依赖注入一
般发生在应用第一次通过getBean向容器索取Bean的时候。下面的一张图描述了这三个过程调用的主要方法,图中的四个过
程其实描述的是上面的第二个过程和第三个过程:
1 Resource定位
下面来看看主要的三个ApplicationContext的实现类是如何定位资源的,也就是找到我们通常所说“applicationContetx.xml”等配
置文件的。
1.1 ClassPathXmlApplicationContext与FileSystemXmlApplicationContext
这两个类都是非Web容器时,常用的ApplicationContext类。他们很相似,所有的构造方法都在重载调用一段核心的代码。这
段代码虽然很短,但是其中是一个很复杂的执行过程,它完成了IOC容器的初始化。
这其中的setConfigLocations方法就是在进行资源定位。这个方法在AbstractRefreshableConfigApplicationContext类中实现。
这个方法首先进行了非空了检验。这个Assert是Spring框架的一个工具类,这里面进行了一个非空判断。然后对这个路径进行
了一些处理。这样就完成了资源的定位。这个定位其实就是使用者主动把配置文件的位置告诉Spring框架。
1.2 XmlWebApplicationContext
这个类是web容器初始化spring IOC容器的类。对于web应用来说,我们通常是不是直接去初始化这个容器的,它的装载是一
个自动进行的过程。这是因为我们在web.xml中配置了这样一句话,这其实就是spring的入口
(1)下面来看这个类ContextLoaderListener,从它的定义就能看出,这是一个ServletContextListener,它的核心方法就是下
面的contextInitialized事件,也就是当web容器初始化的时候,spring容器也进行了初始化。
这个方法将servletContext作为参数传入,它的目标就是为了读取web.xml配置文件,找到我们对spring的配置。
(2)下面来看initWebApplicationContext方法,它完成了对webApplictionContext的初始化工作。这个方法里的有比较重要的
几段代码,他们主要完成了webAppliction构建,参数的注入,以及保存构建webApplictionContext
这段代码看字面意思就知道是新建了一个webApplicationContext。它是由一个工具类产生一个新的wac,这个方法中调用了
determineContextClass方法,它决定了容器初始化为哪种类型的ApplicationContext,因为我们可以在web.xml中对这种类型
进行指定。而如果没有指定的话,就将使用默认的XmlWebApplicationContext。
注入参数,初始化这个空的容器 。这个过程的入口是configureAndRefreshWebApplicationContext这个方法中完成了wac的Id
设置,将servletContext注入到wac中,还有最重要的方法,就是setConfigLocation.这里从web.xml中寻找指定的配置文件的
位置,也就是我们通常配置的“contextConfigLocation”属性
那么如果没有指定呢?在XMLWebApplicationContext中这样一些常量,他们表示了配置文件的默认位置
spring容器初始化完成后,放入serverletContext中,这样在web容器中就可以拿到applicationContext
2 BeanDefinition载入
这个过程是最繁琐,也是最重要的一个过程。这一个过程分为以下几步,
构造一个BeanFactory,也就是IOC容器
调用XML解析器得到document对象
按照Spring的规则解析BeanDefition
对于以上过程,都需要一个入口,也就是前面提到的refresh()方法,这个方法AbstractApplicationContext类中,它描述了整个
ApplicationContext的初始化过程,比如BeanFactory的更新,MessgaeSource和PostProcessor的注册等等。它更像是个初始
化的提纲,这个过程为Bean的声明周期管理提供了条件。
2.1 构建IOC容器
weixin_38500734
- 粉丝: 6
- 资源: 957
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页