国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動

這篇具有很好參考價值的文章主要介紹了spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

spring-framework 版本:v5.3.19

整合步驟

試想這么一個場景。只用 spring mvc(確切來說是spring-framework), 如何既不搭建web工程(無web.xml)又不用 spring boot 的去整合tomcat部署一個web服務?

1、引入 tomcat 和 spring mvc

   		......
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>9.0.62</version>
        </dependency>
    	
    	......

2、實現(xiàn) WebApplicationInitializer接口,即本篇實現(xiàn)的spring mvc 提供的 AbstractAnnotationConfigDispatcherServletInitializer 類
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc
3、編寫controller類
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc
4、編寫main函數(shù)啟動 tomcat
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc
驗證:
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc

整個項目目錄如下
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc

案例 github 地址:https://github.com/no-shutdown/springmvcandjsp.git

實現(xiàn)原理

ServletContainerInitializer與WebApplicationInitializer

ServletContainerInitializer是Java Servlet 3.0規(guī)范中的一部分,接口定義了一個onStartup方法,容器(例如Tomcat、Jetty等)在啟動Web應用程序時會調用這個方法。

至于容器如tomcat里的代碼是如何得到用戶自定義的接口實現(xiàn)類的?
答:通過SPI的方式去獲取。

SpringServletContainerInitializer
spring中為我們實現(xiàn)的ServletContainerInitializer實現(xiàn)類如下
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc

@HandlesTypes 是Java Servlet 3.0規(guī)范中ServletContainerInitializer接口的一個特性,用于向ServletContainerInitializer提供在類路徑上發(fā)現(xiàn)的類的信息。比如:這里的意思就是說,會收集路徑上所有的 WebApplicationInitializer 類作為方法參數(shù)傳入。

所以也就是說,在本篇的案例中,main函數(shù)啟動tomcat時,tomcat會通過SPI的方式去調用到 SpringServletContainerInitializer 類的onStartup方法,而 SpringServletContainerInitializer 又會通過 @HandlesTypes 獲取到所有 WebApplicationInitializer 類并調用他們的 onStartup 方法。

所以其實并不一定要繼承 AbstractAnnotationConfigDispatcherServletInitializer ,也可以自己去實現(xiàn)一個 WebApplicationInitializer 接口,總之需要在 WebApplicationInitializer#onStratUp 中去啟動父子容器。

AbstractAnnotationConfigDispatcherServletInitializer
AbstractAnnotationConfigDispatcherServletInitializer 就是 spring mvc 為我們提供的 WebApplicationInitializer 接口抽象類中的其中一個。其 onStartup 方法做了一些啟動父子容器相關的操作。
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc

父容器的啟動

registerContextLoaderListener
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc
這個方法做了兩件事
1:創(chuàng)建一個spring容器
2:注冊 ContextLoaderListener 到servlet容器

創(chuàng)建父容器的代碼上圖中一起給了,這里再看下 ContextLoaderListener 。
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc
這是一個 ServletContextListener 監(jiān)聽類,在servlet容器啟動時,會調用當前servlet容器所注冊監(jiān)聽器的 contextInitialized 方法。

父容器就是在 ContextLoaderListener.contextInitialized 中啟動的,如下
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc

子容器的啟動

registerDispatcherServlet
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc
這個方法做了兩件事
1:創(chuàng)建一個spring容器
2:注冊 DispatcherServlet 到servlet容器

創(chuàng)建子容器的代碼上圖中一起給了,這里再看下 DispatcherServlet 。
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc
這個類并不陌生,就是 spring mvc 的前端控制器。
但從servlet容器的角度來看,就是一個普通的HttpServlet,所以必然遵循servlet生命周期。
這個servlet生命周期的 init 方法就會去啟動子容器。
spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動,Spring,spring,mvc

相關面試題

1、spring和spring mvc為什么要設計父子容器?
答:單一職責原則,早期spring mvc并不是唯一的主流web框架。為方便快速拔插,比如從 spring mvc 切換到 struts,使用父子容器只需將spring-mvc.xml替換成struts的配置文件struts.xml即可,而spring-core.xml不需要改變。

2、是否可以把所有Bean都交給spring容器(父容器)來管理?
答:不可以,會出現(xiàn)404。因為 spring mvc 在啟動時只會掃描當前容器下Controller注冊HandlerMethod,并沒有同時去查找父容器的bean。

3、是否可以把所有bean都交給spring mvc容器(子容器)來管理?
答:可以 , 因為父容器無非就是包含一些子容器不包含的bean, 如果全在子容器就完全不用父容器了。不過需要注意的是,如果bean都注冊到子容器,原本在父容器配置事務、aop等也需要移動到子容器,否則是不會生效的。文章來源地址http://www.zghlxwxcb.cn/news/detail-616818.html

到了這里,關于spring5源碼篇(13)——spring mvc無xml整合tomcat與父子容器的啟動的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • spring ico容器 spring注入方式 spring與tomcat整合

    spring ico容器 spring注入方式 spring與tomcat整合

    目錄 一、簡介 1、什么是spring? 2、目的 3、功能及使用范圍 二、spring IOC 1、ioc的理解 2、開發(fā)人員可達到的目的 3、分析實現(xiàn) 4、bean配置 三、spring IOC的注入方式 1、set方法屬性注入 2、構造注入 3、自動裝配 四、spring與tomcat的整合/spring與web容器的整合 五、spring AOP 1、aop的特

    2024年02月12日
    瀏覽(22)
  • 73.是否可以把我們所需的Bean都放入Spring-mvc子容器里面來管理(springmvc的spring-servlet.xml中配置全局掃描)?

    可以 , 因為父容器的體現(xiàn)無非是為了獲取子容器不包含的bean, 如果全部包含在子容器完全用不到父容器了, 所以是可以全部放在springmvc子容器來管理的。 雖然可以這么做不過一般應該是不推薦這么去做的,一般人也不會這么干的。如果你的項目里有用到事物、或者aop記得也

    2024年02月21日
    瀏覽(25)
  • Spring5學習隨筆-Spring5的第一個程序(環(huán)境搭建、日志框架整合)

    Spring5學習隨筆-Spring5的第一個程序(環(huán)境搭建、日志框架整合)

    學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 1.JDK1.8+ 2.Maven3.5+ 3.IDEA2018+ 4.SpringFramework 5.1.4 官網(wǎng):www.spring.io Spring的jar包 1.設置pom的依賴 Spring的配置文件 1.配置文件的放置位置:任意位置

    2024年02月05日
    瀏覽(57)
  • Spring5學習隨筆-高級注解(@ComponentScan、@Configuration.....),替換XML配置文件

    Spring5學習隨筆-高級注解(@ComponentScan、@Configuration.....),替換XML配置文件

    學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 Spring在3.x提供的新的注解,用于替換XML配置文件。 問題 : 配置Bean在應用的過程中替換了XML具體的什么內容? AnnotationConfigApplicationContext 配

    2024年02月05日
    瀏覽(20)
  • Spring5學習隨筆-整合MyBatis(持久層)、連接池、Mapper文件

    Spring5學習隨筆-整合MyBatis(持久層)、連接池、Mapper文件

    學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】 JavaEE開發(fā)需要持久層進行數(shù)據(jù)庫的訪問操作。 JDBC MyBatis、Hibernate進行持久開發(fā)過程存在大量的代碼冗余 Spring基于模板設計模式對與上述的持

    2024年02月05日
    瀏覽(50)
  • Spring5系列學習文章分享---第一篇(概述+特點+IOC原理+IOC并操作之bean的XML管理操作)

    Spring5系列學習文章分享---第一篇(概述+特點+IOC原理+IOC并操作之bean的XML管理操作)

    開篇: 歡迎來到 Spring 5 學習系列!在這個系列中,我們將深入研究 Spring 框架的最新版本,揭示其在現(xiàn)代Java開發(fā)中的精髓。無論你是初學者還是有經(jīng)驗的開發(fā)者,本系列都旨在為你提供深刻的理解和實用的知識,讓你在構建強大、可維護和高效的應用程序方面更上一層樓。

    2024年01月22日
    瀏覽(224)
  • SpringMVC父子容器源碼分析

    SpringMVC父子容器源碼分析

    書接上文 1. Spring整合SpringMVC案例分析 Spring框架和Spring MVC框架是Java開發(fā)中常用的兩個框架,它們可以很好地結合使用,提供了一個強大而靈活的開發(fā)環(huán)境。下面是一個簡單的案例分析,演示如何整合Spring和Spring MVC。 主配置類 SpringMVC控制器 啟動類,初始化Spring容器 web.xml o

    2024年01月19日
    瀏覽(12)
  • Spring MVC 二 :基于xml配置

    創(chuàng)建一個基于xml配置的Spring MVC項目。 Idea創(chuàng)建新項目,pom文件引入依賴: 在項目的webapp/WEB-INF目錄下創(chuàng)建web.xml文件,配置DispatcherServlet: 注意其中定義了contextConfigLocation:上下文配置文件位置,配置為:classpath:springmvc.xml,指定Spring MVC啟動過程中會到指定位置讀取該配置文件

    2024年02月11日
    瀏覽(21)
  • 1.7 基于XML配置方式使用Spring MVC

    1.7 基于XML配置方式使用Spring MVC

    1、創(chuàng)建Maven項目 Maven項目 - SpringMvcDemo01 單擊【Finish】按鈕 2、添加相關依賴 在pom.xml文件里添加支持Spring MVC的相關依賴 3、給項目添加Web功能 打開項目結構窗口,在列表里選擇【Modules】 單擊【+】按鈕,添加Web功能 單擊【Create Artifact】按鈕,將名稱改為“SpringMvcDemo01” 單擊

    2024年02月08日
    瀏覽(24)
  • 案例13 Spring MVC參數(shù)傳遞案例

    案例13 Spring MVC參數(shù)傳遞案例

    基于Spring MVC實現(xiàn)HttpServletRequest、基本數(shù)據(jù)類型、Java Bean、數(shù)組、List、Map、JSON方式的參數(shù)傳遞。 選擇Maven快速構建web項目,項目名稱為case13-springmvc02。 ? src.main路徑下,執(zhí)行new – Directory操作,選擇java、resources后,執(zhí)行回車鍵。 ? 在web.xml中配置DispatcherServlet。 src.main.java.

    2024年02月13日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包