當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
重新学习Spring一--Spring在web项目中的启动过程
生活随笔
收集整理的這篇文章主要介紹了
重新学习Spring一--Spring在web项目中的启动过程
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 Spring 在web項(xiàng)目中的啟動(dòng)過程
- Spring簡(jiǎn)介
- Spring 最簡(jiǎn)單的功能就是創(chuàng)建對(duì)象和管理這些對(duì)象間的依賴關(guān)系,實(shí)現(xiàn)高內(nèi)聚、低耦合。(高內(nèi)聚:相關(guān)性很強(qiáng)的代碼組成,既單一責(zé)任原則;低耦合:耦合指塊間聯(lián)系,低耦合既塊間聯(lián)系要低。)
- 還提供像通用日志、性能統(tǒng)計(jì)、安全控制、異常處理等面向切面的能力,能幫我們管理最頭疼的數(shù)據(jù)庫(kù)事務(wù)。
- 本身提供了一套簡(jiǎn)單的JDBC訪問實(shí)現(xiàn),提供了與第三方數(shù)據(jù)訪問框架的集成(如Hibernate、JPA、MyBatis),與各種java EE技術(shù)整合(如任務(wù)調(diào)度、java Mail等等),是一個(gè)超級(jí)粘合平臺(tái)。
- Spring 的運(yùn)行流程
- Spring的啟動(dòng)過程其實(shí)就是IOC容器的啟動(dòng)過程,對(duì)于web程序,IOC容器的啟動(dòng)過程就是建立上下文的過程。
- 啟動(dòng)過程分析:
- 首先,看 web.xml
代碼分析
這段加載了Spring 的配置文件,初始化上下文。ContextLoaderListener是一個(gè)實(shí)現(xiàn)了ServletContextListener接口的監(jiān)聽器,在項(xiàng)目啟動(dòng)時(shí)觸發(fā) contextInitialized 方法(該方法主要完成ApplicationContext對(duì)象的創(chuàng)建),在關(guān)閉項(xiàng)目時(shí)會(huì)觸發(fā) contextDestroyed 方法(該方法會(huì)執(zhí)行ApplicationContext的清理操作)
- 啟動(dòng)項(xiàng)目時(shí)觸發(fā)contextInitialized 方法,該方法就做一件事,通過父類contextLoader的initWebApplicationContext 方法創(chuàng)建Spring上下文對(duì)象(ApplicationContext對(duì)象);
- initWebApplicationContext 方法做了三件事:
- 創(chuàng)建WebApplicationContext;
- 加載對(duì)應(yīng)的Spring文件創(chuàng)建的Bean實(shí)例;
- 講WebApplicationContext放入ServletContext(既javaweb的全局變量中)。
- createWebApplicationContext 創(chuàng)建上下文對(duì)象,支持用戶自定義的上下文對(duì)象,但必須繼承自ConfigurableWebApplicationContext,而Spring MVC默認(rèn)使用 ConfigurableWebApplicationContext 作為 ApplicationContext(它是一個(gè)接口)的實(shí)現(xiàn)。
- configureAndRefreshWebApplicationContext 方法用于封裝Application數(shù)據(jù)并且初始化所有相關(guān)的Bean對(duì)象。它會(huì)從web.xml中讀取名為 contextConfigLocation 的配置,這就是 Spring xml 數(shù)據(jù)源的設(shè)置,然后放到ApplicationContext中,最后調(diào)用傳說中的 refresh 方法執(zhí)行所有java對(duì)象的創(chuàng)建。
- 完成ApplicationContext創(chuàng)建之后就是將其放入ServletContext中,注意它存儲(chǔ)的key值常量。
代碼分析
這段為啟動(dòng)初始化DispatcherServlet,web.xml中設(shè)置了Servlet的load-on-startup:表示啟動(dòng)容器時(shí)初始化該Servlet。
- url-pattern: 表示哪些請(qǐng)求交給Spring Web MVC 處理,“/”是用來定義默認(rèn)servlet映射的。也可以如“*.html”表示攔截所有以html為擴(kuò)展名的請(qǐng)求。
- DispatcherServlet 默認(rèn)使用WebApplicationContext(ContextLoaderListener初始化產(chǎn)生)作為上下文,Spring默認(rèn)文件為“/WEB-INF/servlet名字-servlet.xml”(該名字可以自定義,在<param-value>中)
- 注意:DispatcherServlet 也可以配置自己的初始化參數(shù),覆蓋默認(rèn)配置,因此我們可以通過添加初始化參數(shù)。通過下面例子Spring Web MVC框架將會(huì)加載“classpath:spring-servlet-config.xml” 而不是”/WEB-INF/servlet名字-servlet.xml”
DespatcherServlet初始化順序:
- HttpServletBean 繼承 HTTPServlet , 因此在Web容器啟動(dòng)時(shí)將調(diào)用它的init方法,該初始化方法的主要作用:將Servlet初始化參數(shù)(init-param)設(shè)置到該組件上(如contextAttribute、contextClass、namespace、contextConfigLocation),通過BeanWrapper簡(jiǎn)化設(shè)置過程,方便后續(xù)使用;提供給子類初始化擴(kuò)展點(diǎn),initServletBean(),該方法由 FrameworkServlet 覆蓋。
- FrameworkServlet 繼承 HttpServletBean,通過initServletBean()進(jìn)行Web上下文初始化,該方法主要覆蓋以下兩件事情:初始化web上下文;提供子類初始化擴(kuò)展點(diǎn)。
- DispatcherServlet 繼承 FrameworkServlet,并實(shí)現(xiàn)了 onRefresh()方法提供一些前段控制器相關(guān)的配置。
那么整個(gè) DispatcherServlet 初始化做了些什么? 兩件事:
總結(jié)概括Spring的啟動(dòng)過程:
總結(jié)
以上是生活随笔為你收集整理的重新学习Spring一--Spring在web项目中的启动过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓平板补全最后一块拼图安卓平板补全最后
- 下一篇: 电脑显示屏如何变成电视机观看电视节目如何