當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
重新学习Spring一--Spring在web项目中的启动过程
生活随笔
收集整理的這篇文章主要介紹了
重新学习Spring一--Spring在web项目中的启动过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 Spring 在web項目中的啟動過程
- Spring簡介
- Spring 最簡單的功能就是創建對象和管理這些對象間的依賴關系,實現高內聚、低耦合。(高內聚:相關性很強的代碼組成,既單一責任原則;低耦合:耦合指塊間聯系,低耦合既塊間聯系要低。)
- 還提供像通用日志、性能統計、安全控制、異常處理等面向切面的能力,能幫我們管理最頭疼的數據庫事務。
- 本身提供了一套簡單的JDBC訪問實現,提供了與第三方數據訪問框架的集成(如Hibernate、JPA、MyBatis),與各種java EE技術整合(如任務調度、java Mail等等),是一個超級粘合平臺。
- Spring 的運行流程
- Spring的啟動過程其實就是IOC容器的啟動過程,對于web程序,IOC容器的啟動過程就是建立上下文的過程。
- 啟動過程分析:
- 首先,看 web.xml
代碼分析
這段加載了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值常量。
代碼分析
這段為啟動初始化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”
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的啟動過程:
總結
以上是生活随笔為你收集整理的重新学习Spring一--Spring在web项目中的启动过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓平板补全最后一块拼图安卓平板补全最后
- 下一篇: 重新学习Spring2——IOC和AOP