透過現象看本質,dispatcherservlet我們在配置檔案中配置,光看其名字就知道這是乙個servlet,而servlet我們比較熟悉,宣告週期無非就是init–>service–>destroy。而dispatcherservlet本身沒有該方法,就想到方法應該在其父類。
在此之前,應該先研究下關鍵幾個類的關係。
最終是呼叫httpservletbean的init()方法
spring中的類實在是太多了,我個人在最初學習的時候毫無頭緒,過目就忘,而且看完spring再去看mybatis,感覺mybatis超簡單,原因就是mybatis模擬較少。針對於類多的情況,我主張是去先看介面,因為介面定義了一種規範,帶著這種規範去看某個類,目的就明確一些。
public final void init() throws servletexception
catch (bean***ception ex)
throw ex;
}} // let subclasses do whatever initialization they like.
initservletbean();
}
httpservletbean是乙個抽象類,其中的initservletbean()又去呼叫子類frameworkservlet的
protected final void initservletbean() throws servletexception
long starttime = system.currenttimemillis();
try
catch (servletexception | runtimeexception ex)
if (logger.isdebugenabled())
// a context instance was injected at construction time -> use it
if (!cwac.isactive()) }}
}if (wac == null)
if (wac == null)
if (!this.refresheventreceived)
}if (this.publishcontext)
return wac;
}initmultipartresolver(context);
initlocaleresolver(context);
initthemeresolver(context);
inithandleradapters(context);
inithandlerexceptionresolvers(context);
initrequesttoviewnametranslator(context);
initviewresolvers(context);
initflashmapmanager(context);
}detecthandlers();
}protected void detecthandlers() throws bean***ception
}if ((logger.isdebugenabled() && !gethandlermap().isempty()) || logger.istraceenabled())
}determineurlsforhandler()在獲取url之後,registerhandler()對handler進行註冊。
spring mvc初始化及其原理
spring mvc啟動過程大致分為兩個過程 1 contextloaderlistener初始化,例項化ioc容器,並將此容器例項註冊到servletcontext中。2 dispatcherservlet初始化。1.listener org.springframework.web.context...
springMVC啟動初始化過程
在web.xml裡配置分發servlet和contextloaderlistener,contextloaderlistener是spring提供的類,它繼承了contextloader類和實現了servletcontextlistener介面。servletcontextlistener負責監聽w...
Spring 一 SpringMvc初始化流程
執行contextinitialized 方法,初始化root上下文,並建立spring ioc容器 2.filter 過濾器 執行init 方法 3.servlet 執行init 方法,初始化webmvc上下文,並建立springmvc ioc容器 注 spring和springmvc的容器具有父...