转载

Spring Mvc启动、请求处理过程源码分析

spring mvc 最重要的几个组件如下:

DispatcherServlet:前端控制器, 根据请求url不同将请求路由给不同的Controller处理

HandlerMapping 根据url匹配合适的handler

HandlerAdapter handler有多种实现方式,比如基于annotation, 静态资源实现HttpRequestHandler的handler

ViewResolver 根据controler返回的逻辑view名称匹配合适的view

类图如下

Spring Mvc启动、请求处理过程源码分析

spring mvc对各个组件实现了自动注册,比如context 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:p="http://www.springframework.org/schema/p"
    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
        ">
    <context:component-scan base-package="cn.javacoder.test_mvc"/>
</beans>

没有任何关于spring mvc这三大组件的配置,请求也能路由到controller中取, 这是因为在spring-webmvc-*.jar的DispatchServlet.properties文件中指定了各个组件的默认值,当spring构建上下文时发现没有这些组件。就会根据DispatchServlet.properties中的默认值进行注册相应的组件。

序列图如下

Spring Mvc启动、请求处理过程源码分析

如果我们修改context xml文件, 添加

<mvc:annotation-driven/>

注解, 那么spring 启动时会调用AnnotationDrivenBeanDefinitionParser.parse解析<mvc:annotation-driven/>注解,然后为我们注册HandlerMapping, HandlerAdapter,ViewResolver 这三大组件。

序列图如下(图比较大,请在新的窗口中查看原图):

Spring Mvc启动、请求处理过程源码分析

Posted in:spring practise

原文  http://www.javacoder.cn/?p=1198
正文到此结束
Loading...