• SpringMVC原理讲解


    1、利用Servlet(tomcat)容器的spi发现思想进行方法调用,services包下会有一个以类名命名的文件

     2、内部只定义需要访问的类

     3、这个类的特点是实现ServletContainerInitializer 接口  并且使用  @HandlesTypes 注解

     4、注解会收集WebApplicationInitializer类型的实例 并封装到set容器中,实现这个类主要是会被tomcat掉用到onstartup方法,并且

      入参就是收集的set集合。

     5、具体内容调用

     6、可以通过集成 AbstractAnnotationConfigDispatcherServletInitializer 类来手动创建一个@HandlesTypes注解类型的类,然后重写

    里面的方法,可以达到,灵活装配,其实就是钩子方法。当调用initialize.onStartup()  的时候,其实会调用到 

    AbstractAnnotationConfigDispatcherServletInitializer   类的父类AbstractDispatcherServletInitializer  这个类中

     7、super方法,实现spring容器的创建

    WebApplicationContext rootAppContext = createRootApplicationContext();
    创建后加入监听,最终将监听加入tomcat容器
    ContextLoaderListener listener = new ContextLoaderListener(rootAppContext);
    listener.setContextInitializers(getRootApplicationContextInitializers());
    servletContext.addListener(listener);

    8、上一步只是创建上下文,并没有初始化,初始化操作是在 

    ContextLoaderListener 类中,也就是监听中,被tomcat调用的

     9、Spring容器已经启动完成,剩下的就是servlet启动,具体来说就是 DispatcherServlet

     10、进入后也只是创建了 上下文,并没有初始化,初始化是在  servlet的 init  方法中   init方法是DispatcherServlet的父类

            HttpservletBean中,最后调用  initServletBean();

    11、MVC初始化,也就是进行相关Bean的实例化。注意此时有个@EnableMVC注解的话,这个注解中的类也会被实例化

    12、基础类,初始化,这个地方是进行的收集工作,由于在@EnableMVC中已经进行了实例化,所以此时是有值得。

     13、请求处理类、方法处理类、试图解析处理类

     

     14、剩下还有很多细节,下一步就是,一个请求过来进入  servlet 的service方法,然后根据URl找到方法,进行方法

      的反射调用,有一点就是URL和Method的映射工作是在@EnableMVC中做的。先介绍这么多吧,入门了,后面的都好说。

     
    
    
     
  • 相关阅读:
    Java基础知识回顾
    设计模式简单回顾
    数据结构基础知识
    《More Effective C#》读书笔记
    《Effective C#》读书笔记
    《编程匠艺》读书笔记
    《Scrum实战》读书会作业01
    开始一段新的敏捷学习之旅 —— IT帮读书会第4期《Scrum实战》
    【译】别学框架,学架构
    AngularJS学习笔记(1)
  • 原文地址:https://www.cnblogs.com/zxg-blog/p/15127522.html
Copyright © 2020-2023  润新知