spring源代码解析(二)IOC容器在web中启动.docVIP

spring源代码解析(二)IOC容器在web中启动.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上面我们分析了IOC容器本身的实现,下面我们看看在典型的web环境中,Spring IOC容器是怎样被载入和起作用的。 简单的说,在web容器中,通过ServletContext为Spring的IOC容器提供宿主环境,对应的建立起一个IOC容器的体系。其中,首先需要建立的是根上下文,这个上下文持有的对象可以有业务对象,数据存取对象,资源,事物管理器等各种中间层对象。在这个上下文的基础上,和web MVC相关还会有一个上下文来保存控制器之类的MVC对象,这样就构成了一个层次化的上下文结构。在web容器中启动Spring应用程序就是一个建立这个上下文体系的过程。Spring为web应用提供了上下文的扩展接口 WebApplicationContext: Java代码 public?interface?WebApplicationContext?extends?ApplicationContext?{ ?? ????//这里定义的常量用于在ServletContext中存取根上下文 ?? ????String?ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE?=?WebApplicationContext.class.getName()?+?.ROOT; ?? ????...... ?? ????//对WebApplicationContext来说,需要得到Web容器的ServletContext ?? ????ServletContext?getServletContext(); ?? }?? 而一般的启动过程,Spring会使用一个默认的实现,XmlWebApplicationContext - 这个上下文实现作为在web容器中的根上下文容器被建立起来,具体的建立过程在下面我们会详细分析。 Java代码 public?class?XmlWebApplicationContext?extends?AbstractRefreshableWebApplicationContext?{ ?? ?? ????/**?这是和web部署相关的位置信息,用来作为默认的根上下文bean定义信息的存放位置*/?? ????public?static?final?String?DEFAULT_CONFIG_LOCATION?=?/WEB-INF/applicationContext.xml; ?? ????public?static?final?String?DEFAULT_CONFIG_LOCATION_PREFIX?=?/WEB-INF/; ?? ????public?static?final?String?DEFAULT_CONFIG_LOCATION_SUFFIX?=?.xml; ?? ??? ?? ????//我们又看到了熟悉的loadBeanDefinition,就像我们前面对IOC容器的分析中一样,这个加载工程在容器的refresh()的时候启动。 ?? ????protected?void?loadBeanDefinitions(DefaultListableBeanFactory?beanFactory)?throws?IOException?{ ?? ????????//对于XmlWebApplicationContext,当然使用的是XmlBeanDefinitionReader来对bean定义信息来进行解析 ?? ????????XmlBeanDefinitionReader?beanDefinitionReader?=?new?XmlBeanDefinitionReader(beanFactory); ?? ?? ????????beanDefinitionReader.setResourceLoader(this); ?? ????????beanDefinitionReader.setEntityResolver(new?ResourceEntityResolver(this)); ?? ?? ????????initBeanDefinitionReader(beanDefinitionReader); ?? ????????loadBeanDefinitions(beanDefinitionReader); ?? ????} ?? ?? ????protected?void?initBeanDefinitionReader(XmlBeanDefinitionReader?beanDefinitionReader)?{ ?? ????} ?? ????//使用XmlBeanDefinitionReader来读入bean定义信息 ?? ????protected?void?load

文档评论(0)

3388813 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档