Spring mvc零配置源碼閱讀總結(jié)

Spring mvc零配置啟動(dòng)

  1. 運(yùn)用spi技術(shù)加載spring-web.jar 下面的META-INF/services/java.servlet.ServletContainerInitializer文件
  2. ServletContainerInitializer類中的@HandlerTypes注解會(huì)加載所有的實(shí)現(xiàn)了WebApplicationInitializer接口的類
  3. 所有被加載的類,會(huì)被放到onStartup方法的參數(shù)中,
  4. onStartup方法會(huì)實(shí)例化所有實(shí)現(xiàn)了WebApplicationInitializer接口的類,并調(diào)用他們的onStartup方法
  5. 在onStartup方法中會(huì)調(diào)用父類的onStartup方法,創(chuàng)建servletListener用來初始化Spring容器
  6. 在onStartup方法中還會(huì)創(chuàng)建DispatcherServlet對(duì)象,DispatcherServlet對(duì)象的init方法會(huì)加載Spring mvc容器,被設(shè)置Spring容器為它的父容器
  7. HandlerMapping、HandlerAdapter、ViewResolver實(shí)例的實(shí)例化,是借助@EnableWebmMvc和@Bean實(shí)現(xiàn)的的,在@Bean中會(huì)有鉤子方法,會(huì)調(diào)用父類的方法,而父類會(huì)通過@Autowired注解將所有實(shí)現(xiàn)了WebMvcConfigurer的實(shí)例加入到類屬性中,方便用戶自定義HandlerMapping、HandlerAdapter、ViewResolver

一個(gè)接口調(diào)用的流程

  1. servlet的service方法
  2. 調(diào)用JDK的super.service方法
  3. 區(qū)分請(qǐng)求類型,回調(diào)到spring-mvc包中的doGet/doPost/doPut/doDelete方法
  4. 都會(huì)統(tǒng)一調(diào)用processRequest方法
  5. 在processRequest中會(huì)調(diào)用doService方法
  6. 在doService方法中會(huì)調(diào)用doDispatch方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容