Spring MVC 根上下文 call hierarchy
2016-04-21 23:56
302 查看
上一篇文章主要是介绍了Spring mvc上下文的初始化过程,对于父子容器如何被初始化没有仔细讲。下面根容器的call hierarchy 是自己在阅读源代码自己做的笔记,放当wiki上,做个记录。
当Web应用启动时,contextInitialized方法会执行载入根上下文(IOC容器):
ContextLoaderListener.contextInitialized(ServletContextEvent event)
->ContextLoader.initWebApplicationContext(ServletContext servletContext)
->ContextLoader.createWebApplicationContext(ServletContext sc) - - - - - 如果web.xml里没指定类型,默认是XmlWebAppalication
->ContextLoader.configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac, ServletContext sc) - - - - - - 配置和初始化 webApplicationContext
->ConfigurableWebApplicationContext.refresh() - - - - - ConfigurableWebApplicationContext是接口
->AbstractApplicationContext.refresh() - - - - - 启动 容器初始化
->AbstractApplicationContext.obtainFreshBeanFactory() - - - - - 创建BeanFactory,开始容器的初始化过程,比如BeanDefinition的载入
->AbstractRefreshableApplicationContext.refreshBeanFactory() - - - - - 在这里创建了BeanFactory(DefaultListableBeanFactory)。然后开始loadBeanDefinitions,这是一个抽象方法,实际的载入是在XmlWebApplicationContext类里。
->XmlWebApplicationContext.loadBeanDefinitions(DefaultListableBeanFactory beanFactory) - - - -创建一个XmlBeanDefinitionReader,并启动bean定义信息的载入。
->XmlWebApplicationContext.loadBeanDefinitions(XmlBeanDefinitionReader reader) - - - 根据配置文件的locations,因为配置文件是xml的,所以使用的是XmlBeanDefinitionReader 。具体的载入过程是委托给BeanDefinitionReader完成的
->AbstractBeanDefinitionReader.loadBeanDefinitionReader - - - 这是一个抽象类,实际的载入是在XmlBeanDefinitionReader中实现的,抽象类是根据bean定义的xml配置文件的路径,生成resource。然后XmlBeanDefinitionReader根据resource开始具体载入BeanDefinition
->XmlBeanDefinitionReader.loadBeanDefinitionReader(Resource resource)
->XmlBeanDefinitionReader.loadBeanDefinitions(EncodedResource encodedResource) - - - 在读取器中,需要得到代表XML文件的resource,这个resource对象封装了对xml文件的IO操作,所以读取器可以在打开IO流后得到XML的文件对象。
->XmlBeanDefinitionReader.doLoadBeanDefinitions(InputSource inputSource, Resource resource) - - - -读取器在这里打开IO流后得到XML的文件Document对象(Document对象是通过XML解析器出来的,下面会再根据Spring Bean的规则再解析出BeanDefinition)。得到对象后就可以按照spring的Bean定义规则来对这个xml的文件档树进行解析了
->XmlBeanDefinitionReader.registerBeanDefinitions(Document doc, Resource resource) - - -这个方法启动对BeanDefinition的解析的详细过程,这个解析会使用到Spring的Bean的配置规则。具体的过程是有BeanDefinitionDocumentReader来完成的。
->BeanDefinitionDocumentReader.registerBeanDefinitions(Document doc, XmlReaderContext readerContext)
->DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(Document doc, XmlReaderContext readerContext) - - - - -DefaultBeanDefinitionDocumentReader 是BeanDefinitionDocumentReader的实现类,registerBeanDefinitions方法开始按照Spring
Bean的规则解析Document对象
->DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(Element root) - - -解析过程是由BeanDefinitionParserDelegate对象来完成的。
->DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate)
->DefaultBeanDefinitionDocumentReader.parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate)
->DefaultBeanDefinitionDocumentReader.processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate)
- - - - 解析的结果是由BeanDefinitionHolder来持有的,这个BeanDefinitionHolder对象封装了BeanDefinition,beanName,aliases等信息,用它来完成向IOC容器注册。
->BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element ele)
->BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element ele, BeanDefinition containingBean)
->BeanDefinitionParserDelegate.parseBeanDefinitionElement(
Element ele, String beanName, BeanDefinition containingBean) - - - 对xml配置文件中的配置的Bean进行详细解析,这里只是读取定义 的<bean>,并载入到BeanDefinition中去,这里不涉及对象的实例化过程,对象的实例化实际上是再依赖注入时完成的。
各个元素的具体解析过程 这里就不一一阐述了。
当Web应用启动时,contextInitialized方法会执行载入根上下文(IOC容器):
ContextLoaderListener.contextInitialized(ServletContextEvent event)
->ContextLoader.initWebApplicationContext(ServletContext servletContext)
->ContextLoader.createWebApplicationContext(ServletContext sc) - - - - - 如果web.xml里没指定类型,默认是XmlWebAppalication
->ContextLoader.configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac, ServletContext sc) - - - - - - 配置和初始化 webApplicationContext
->ConfigurableWebApplicationContext.refresh() - - - - - ConfigurableWebApplicationContext是接口
->AbstractApplicationContext.refresh() - - - - - 启动 容器初始化
->AbstractApplicationContext.obtainFreshBeanFactory() - - - - - 创建BeanFactory,开始容器的初始化过程,比如BeanDefinition的载入
->AbstractRefreshableApplicationContext.refreshBeanFactory() - - - - - 在这里创建了BeanFactory(DefaultListableBeanFactory)。然后开始loadBeanDefinitions,这是一个抽象方法,实际的载入是在XmlWebApplicationContext类里。
->XmlWebApplicationContext.loadBeanDefinitions(DefaultListableBeanFactory beanFactory) - - - -创建一个XmlBeanDefinitionReader,并启动bean定义信息的载入。
->XmlWebApplicationContext.loadBeanDefinitions(XmlBeanDefinitionReader reader) - - - 根据配置文件的locations,因为配置文件是xml的,所以使用的是XmlBeanDefinitionReader 。具体的载入过程是委托给BeanDefinitionReader完成的
->AbstractBeanDefinitionReader.loadBeanDefinitionReader - - - 这是一个抽象类,实际的载入是在XmlBeanDefinitionReader中实现的,抽象类是根据bean定义的xml配置文件的路径,生成resource。然后XmlBeanDefinitionReader根据resource开始具体载入BeanDefinition
->XmlBeanDefinitionReader.loadBeanDefinitionReader(Resource resource)
->XmlBeanDefinitionReader.loadBeanDefinitions(EncodedResource encodedResource) - - - 在读取器中,需要得到代表XML文件的resource,这个resource对象封装了对xml文件的IO操作,所以读取器可以在打开IO流后得到XML的文件对象。
->XmlBeanDefinitionReader.doLoadBeanDefinitions(InputSource inputSource, Resource resource) - - - -读取器在这里打开IO流后得到XML的文件Document对象(Document对象是通过XML解析器出来的,下面会再根据Spring Bean的规则再解析出BeanDefinition)。得到对象后就可以按照spring的Bean定义规则来对这个xml的文件档树进行解析了
->XmlBeanDefinitionReader.registerBeanDefinitions(Document doc, Resource resource) - - -这个方法启动对BeanDefinition的解析的详细过程,这个解析会使用到Spring的Bean的配置规则。具体的过程是有BeanDefinitionDocumentReader来完成的。
->BeanDefinitionDocumentReader.registerBeanDefinitions(Document doc, XmlReaderContext readerContext)
->DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(Document doc, XmlReaderContext readerContext) - - - - -DefaultBeanDefinitionDocumentReader 是BeanDefinitionDocumentReader的实现类,registerBeanDefinitions方法开始按照Spring
Bean的规则解析Document对象
->DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(Element root) - - -解析过程是由BeanDefinitionParserDelegate对象来完成的。
->DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate)
->DefaultBeanDefinitionDocumentReader.parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate)
->DefaultBeanDefinitionDocumentReader.processBeanDefinition(Element ele, BeanDefinitionParserDelegate delegate)
- - - - 解析的结果是由BeanDefinitionHolder来持有的,这个BeanDefinitionHolder对象封装了BeanDefinition,beanName,aliases等信息,用它来完成向IOC容器注册。
->BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element ele)
->BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element ele, BeanDefinition containingBean)
->BeanDefinitionParserDelegate.parseBeanDefinitionElement(
Element ele, String beanName, BeanDefinition containingBean) - - - 对xml配置文件中的配置的Bean进行详细解析,这里只是读取定义 的<bean>,并载入到BeanDefinition中去,这里不涉及对象的实例化过程,对象的实例化实际上是再依赖注入时完成的。
各个元素的具体解析过程 这里就不一一阐述了。
相关文章推荐
- Javaweb--如何让登陆页面的表单不默认显示账号和密码
- java Thread sleep yield join wait notify notifyAll
- java视频
- j2ee开发中的“java容器”和“web容器”有什么区别?
- Ubuntu15.10系统下JDK环境的配置
- Android开发常遇问题——Process 'command 'D:....\jdk8_64\bin\java.exe'' finished with non-zero exit value 2
- java 访问权限
- 打包java程序成jar包
- java实现远程控制
- java——认识数组
- spring,hibernate和struts2三大框架整合初印象
- Spring IOC 和 AOP
- java——认识事件与接口
- Java Web基础知识之Listener:监控Servlet的每个动作
- java中volatile关键字的含义
- java堆排序递归代码,无原理版,比较好理解
- eclipse菜单解释及中英对照《二》
- SpringMVC学习总结(2)——SpringMVC返回json配置
- SpringMVC学习总结(2)——SpringMVC返回json配置
- eclipse菜单解释及中英对照