日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

重新学习Spring一--Spring在web项目中的启动过程

發布時間:2023/12/3 javascript 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重新学习Spring一--Spring在web项目中的启动过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 Spring 在web項目中的啟動過程


  • Spring簡介
    • Spring 最簡單的功能就是創建對象管理這些對象間的依賴關系實現高內聚、低耦合。(高內聚:相關性很強的代碼組成,既單一責任原則;低耦合:耦合指塊間聯系,低耦合既塊間聯系要低。)
    • 還提供像通用日志、性能統計、安全控制、異常處理等面向切面的能力,能幫我們管理最頭疼的數據庫事務。
    • 本身提供了一套簡單的JDBC訪問實現,提供了與第三方數據訪問框架的集成(如Hibernate、JPA、MyBatis),與各種java EE技術整合(如任務調度、java Mail等等),是一個超級粘合平臺。
  • Spring 的運行流程
    • Spring的啟動過程其實就是IOC容器的啟動過程,對于web程序,IOC容器的啟動過程就是建立上下文的過程。
    • 啟動過程分析:
      • 首先,看 web.xml
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-context.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener> <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-context.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

代碼分析
這段加載了Spring 的配置文件,初始化上下文。ContextLoaderListener是一個實現了ServletContextListener接口的監聽器,在項目啟動時觸發 contextInitialized 方法(該方法主要完成ApplicationContext對象的創建),在關閉項目時會觸發 contextDestroyed 方法(該方法會執行ApplicationContext的清理操作)

  • 啟動項目時觸發contextInitialized 方法,該方法就做一件事,通過父類contextLoader的initWebApplicationContext 方法創建Spring上下文對象(ApplicationContext對象)
  • initWebApplicationContext 方法做了三件事:
    • 創建WebApplicationContext;
    • 加載對應的Spring文件創建的Bean實例;
    • 講WebApplicationContext放入ServletContext(既javaweb的全局變量中)。
  • createWebApplicationContext 創建上下文對象,支持用戶自定義的上下文對象,但必須繼承自ConfigurableWebApplicationContext,而Spring MVC默認使用 ConfigurableWebApplicationContext 作為 ApplicationContext(它是一個接口)的實現。
  • configureAndRefreshWebApplicationContext 方法用于封裝Application數據并且初始化所有相關的Bean對象。它會從web.xml中讀取名為 contextConfigLocation 的配置,這就是 Spring xml 數據源的設置,然后放到ApplicationContext中,最后調用傳說中的 refresh 方法執行所有java對象的創建。
  • 完成ApplicationContext創建之后就是將其放入ServletContext中,注意它存儲的key值常量。
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

代碼分析
這段為啟動初始化DispatcherServlet,web.xml中設置了Servlet的load-on-startup:表示啟動容器時初始化該Servlet。

  • url-pattern: 表示哪些請求交給Spring Web MVC 處理,“/”是用來定義默認servlet映射的。也可以如“*.html”表示攔截所有以html為擴展名的請求。
  • DispatcherServlet 默認使用WebApplicationContext(ContextLoaderListener初始化產生)作為上下文,Spring默認文件為“/WEB-INF/servlet名字-servlet.xml”(該名字可以自定義,在<param-value>中)
    • 注意:DispatcherServlet 也可以配置自己的初始化參數,覆蓋默認配置,因此我們可以通過添加初始化參數。通過下面例子Spring Web MVC框架將會加載“classpath:spring-servlet-config.xml” 而不是”/WEB-INF/servlet名字-servlet.xml”
<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 這里進行初始化 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-servlet-config.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet>

DespatcherServlet初始化順序:

  • HttpServletBean 繼承 HTTPServlet , 因此在Web容器啟動時將調用它的init方法,該初始化方法的主要作用:將Servlet初始化參數(init-param)設置到該組件上(如contextAttribute、contextClass、namespace、contextConfigLocation),通過BeanWrapper簡化設置過程,方便后續使用;提供給子類初始化擴展點,initServletBean(),該方法由 FrameworkServlet 覆蓋。
  • FrameworkServlet 繼承 HttpServletBean,通過initServletBean()進行Web上下文初始化,該方法主要覆蓋以下兩件事情:初始化web上下文;提供子類初始化擴展點。
  • DispatcherServlet 繼承 FrameworkServlet,并實現了 onRefresh()方法提供一些前段控制器相關的配置。

那么整個 DispatcherServlet 初始化做了些什么? 兩件事:

  • 初始化Spring Web MVC 使用的Web上下文,并且制定容器為 WebApplicationContext (ContextLoaderListener 加載了的根上下文);
  • 初始化 DispatchServlet 使用的策略,如HandlerMapping、HandlerAdapter等。
  • 總結概括Spring的啟動過程:


  • 首先,對于一個web應用,其部署在web容器中,web容器提供其一個全局的上下文環境,這個上下文就是ServletContext,其為后面的Spring IOC 容器提供宿主環境,Spring的啟動過程,實際上就是SpringIOC容器的啟動過程
  • 其次,在web.xml中會提供一個contextLoaderListener,在這里會初始化一個根上下文,既Spring IOC容器。在web容器啟動時,會觸發容器初始化時間,此時contextLoaderListener 會監聽到這個事件,其contextInitialized 方法會被調用,在這個方法中,Spring 會初始化一個啟動上下文,叫根上下文,既WebApplicationContext,這是一個接口,實際上是XMLWebApplicationContext。這個就是Spring的IOC容器。初始化完畢后,Spring會以一個key得形式將其存儲到ServletContext中,便于獲取。
  • 再次,contextLoaderListener 監聽器初始化完畢后,開始初始化web.xml中配置的Servlet,這里是DispatcherServlet,這個servlet實際上是一個標準的前段控制器,用以轉發、匹配、處理每個servlet請求。DispatcherServlet 上下文在初始化的時候會建立自己的IOC上下文,用以持有Spring MVC相關的bean。在建立DispatcherServlet自己的IOC上下文時,會先從key中獲取到之前的根上下文(既WebApplicationContext)作為自己上下文的parent上下文。有了這個parent上下文,在初始化自己持有的上下文。他初始化自己的上下文在其initStrategies 方法中可以看到,大概的工作就是初始化處理映射、視圖解析等,其默認實現類也是XMLWebApplicationContext。
  • 總結

    以上是生活随笔為你收集整理的重新学习Spring一--Spring在web项目中的启动过程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。