二、SpringMVC实现原理

SpringMVC实现原理

一、初始化工作

    1.根据Spring IOC 的思路,需要将参与业务的对象全部创建并保存,共流程调用。所以首先我们需要创建Controller对象,Http请求是通过注解找到对应的Controller对象,所以我们需要将所有的Controller与其注解建立关联。

    2.Controller 的Method 也是通过注解与HTTP请求映射的,同样的,我们需要将所有的Method与其注解建立关联,HTTP直接通过注解的值找到对应的Method.

    3.实例化视图解析器

        1.DispatcherServlet接受请求,通过映射从IOC容器中获取对应的Controller对象

        2.根据映射获取Controller对象对应的Method

        3.调用Method,获取返回值

        4.将返回值传给视图解析器,返回物理视图

        5.完成页面的跳转

二、创建MyDispatcherServlet

    1).init方法完成初始化:

        1.将Controller与注解进行关联,保存到IOC Container中,同时满足两点:一点:springMVC.xml中配置扫描的类;二点:类定义处添加注解

        Controller对象代码思路:

            (1)解析springMVC.xml

            (2)获取component-scan标签配置的包下的所有类

            (3)判断若这些类添加了@MyController 注解,则创建实例对象,并保存到iocContainer中

            (4)@MyRequestMapping的值为键,Controller对象为值

        将Controller中的Method与注解进行关联,保存到handlerMapping中,代码思路:

            (1)遍历iocContainer中的Controller实例对象

            (2)遍历每一个Controller对象的Method

            (3)判断Method是否添加了@MyRequestMapping注解,若添加,则进行映射并保存

            (4)保存到handlerMapping中,@MyRequestMapping的值为键,Method为值

        实例化ViewResolver,代码思路:

            (1)解析springMVC.xml

            (2)根据bean标签的class属性获取需要实例化的MyViewResolver

            (3)使用反射创建实例化对象,同时获取prefix和suffix属性,以及setter方法

            (4)使用反射调用setter方法给属性赋值,完成MyViewResolver的实例化。

        doPost方法处理HTTP请求:

            (1)解析HTTP,分别得到Controller和Method对应的uri

            (2)通过uri分别在iocContainer和handlerMapping中获取对应的Controller以及Method

            (3)使用反射调用Method,执行业务方法,获取结果

            (4)结果传给MyViewResolver进行解析,返回真正的物理视图

            (5)页面跳转

              

        

        


猜你喜欢

转载自blog.csdn.net/chaoyue1861/article/details/79625391