zoukankan      html  css  js  c++  java
  • 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中做的。先介绍这么多吧,入门了,后面的都好说。

     
    
    
     
  • 相关阅读:
    团队项目第二阶段——第一天
    团队项目第一阶段绩效评估
    铁大树洞与市面上现有APP对比
    第一阶段其他组评价汇总
    第一阶段对其他组的评价
    铁大树洞app功能演示和使用说明
    团队冲刺——第十天
    团队冲刺——第九天
    团队冲刺——第八天
    梦断代码读后感04--毁灭即拯救
  • 原文地址:https://www.cnblogs.com/zxg-blog/p/15127522.html
Copyright © 2011-2022 走看看