spring框架在什么地方真正实例化了Bean

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这是一个问题,问很多人都不清楚的问题,也许有一部分人知道spring是隐式得调用DefaultLisTableBeanFactory的父类AbstractBeanFactory的

getBean()方法来真正实例化对象的,那么,这个getBean()到底是在什么地方调用的呢?那么,我们就来分析一下吧。

1:基于springMVC框架的项目:

这个就很简单了,我们都知道基于spring的web项目。IOC容器初始化的入口全部在web.xml里面:

org.springframework.web.context.ContextLoaderListener

通过这个ContextLoaderListener,spring完成了BeanDefinition的解析,注册。也就是完成了对XML配置文件的解读,并把所有定义的bean

信息作为spring特有的数据结构存储到了BeanDefinition集合。并将这个集合作为hasMap保存在容器里。并且在这个过程中,建立了web项目的上下

文环境。

接下来,我们看springMvc的容器初始化,他是通过web.xml的这个入口进入的。通过这个DispatcherServlet的入口,spring会再次建立一个上下

文在DispatcherServlet建立起来的上下文之上的。

tms

org.springframework.web.servlet.DispatcherServlet

1

tms

*.htm

好了,接下来的事情就很明显了,项目启动起来后,当一个URL请求过来的时候,就会进入 DispatcherServlet,在这个类里面,spring调用了

getBean()方法,对URL请求需要用到的对象,都进行了实例化。

我们可以看看通常我们的一个控制层的配置文件:

"/dtd/spring-beans-2.0.dtd">

class="cn.wadata.hdc.tms.controller.SuggestCompletedController">

class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameReso lver">

getSuggestData

class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

sjjEhrController

sjjEhrController

sjjEhrController

可以看到,控制层的所有bean定义都是需要被注入到 mbUrlMapping里面的。

我们接下来看看DispatcherServlet。他有很多init方法,其中就有一个initHandlerMappings:

private void initHandlerMappings(ApplicationContext context) {

this.handlerMappings = null;

相关文档
最新文档