zoukankan      html  css  js  c++  java
  • tomcat与springmvc 结合 之---第19篇 springmvc 加载.xml文件的bean 过程

    writedby 张艳涛,看springmvc 的源码太难了,怎么办,

    这篇文章主要分析了看透springmvc的第9章结尾的 如何解析xml 命名空间标签

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd  ">
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
        <!-- 处理器 -->
        <bean id="NoannaContoller" name="/go2.action" class="com.zyt.NoannaContoller"></bean>
        <!-- 处理器映射器 根据bean的name进行查找Handler 将action的url配置在bean的name中 -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
        <mvc:annotation-driven/>
    </beans>

    之前真没注意过,说的命名空间配置的标签是就是xmlns, 标签就是mvc,如上图的整个红色空间,

    现在的想法还比较初步,现在理解的主要想法是在dispatcherservlet 一定会配置的就是

            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:springmvc.xml</param-value>
            </init-param>

    那么一定会解析这个springmvc.xml

    这个流程是createWebApplicationContext

    进入configureAndRefreshWebApplicationContext

    refresh()

    进入

    主要下面的 新建了一个XmlBeanDefinitionReader 对象

    获取configLocations 本例中只有classpath:springmvc.xml

    进入 XmlBeanDefinitionReader对象内部

    解析成doc对象

    新建一个BeanDefinitionDocumentReader documentReader

    这里注意创建createReaderContext过程之中创建了他的成员

    解析出来根对象

    解析bean定义

    找到了 名字为mvc:annotation-driven 的标签

    接着resolve

    接着

    读取所有的META-INF/spring.handlers的值,在所有的spring包内都有一个这个文件,这个参数 有一个classloader 就带有他读取jar包路径

    这里使用类加载器的parent加载器urlloader

    上边的方法是在ClassLoader.getResource()方法,平时所说的加载模式能在这里看到

    其中最上层Launcher$ExtClassLoader,他的parent是null;

    下一层是AppClassLoader

    再下一层是URLclassloader

    磨磨唧唧的读取了如下属性

    接着resolve函数中按照读取的配置文件 新建对象,反射创建

    之后进入namespaceHandler.init();  创建的org.springframework.web.servlet.config.MvcNamespaceHandler对象的initial()方法

    进入父类的方法,将parse方法父类的parsers成员内

    接着回到

    这个方法里面比较复杂以后再分析

  • 相关阅读:
    mORMot使用基础 2 数据库连接
    【Effective C++】继承与面向对象设计
    【Effective C++】实现
    【Effective C++】设计与声明
    【Effective C++】资源管理
    【Effective C++】构造/析构/赋值运算
    【Effective C++】让自己习惯C++
    【网络基础】计算机网络常考知识点整理
    【C++基础学习】成员对象与对象数组
    C++编程规范纲要要点小结
  • 原文地址:https://www.cnblogs.com/zytcomeon/p/15040929.html
Copyright © 2011-2022 走看看