国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

spring-framework源碼研讀

rottengeek / 2761人閱讀

摘要:額外知識點(diǎn)參考知識點(diǎn)加載策略資源后,容器啟動時(shí)會調(diào)用的方法。從獲取對象對象,如果存在則拋異常。這個是重點(diǎn)核心的知識點(diǎn),參考知識點(diǎn)。看到這里應(yīng)該知道每一層的作用吧,一層一層往上遞進(jìn)第四步正在研讀

1.根據(jù)我們常用的web.xml里,我們找到的org.springframework.web.context.ContextLoaderListener。web.xml如下



    moon
    
        org.springframework.web.context.ContextLoaderListener
     
    
        contextConfigLocation
        
            classpath*:applicationContext.xml
        
    

其實(shí)ContextLoaderListener是一個ServletContextListener,一個web容器的監(jiān)聽器。根據(jù)其父類org.springframework.web.context.ContextLoader初始化的策略配置,找到類目錄下面的ContextLoader.properties文件。里面配置著一個Spring上下文類。

# Default WebApplicationContext implementation class for ContextLoader.
# Used as fallback when no explicit context implementation has been specified as context-param.
# Not meant to be customized by application developers.

org.springframework.web.context.WebApplicationContext=org.springframework.web.context.support.XmlWebApplicationContext

額外知識點(diǎn):
參考《ClassPathResource知識點(diǎn)》

加載策略資源(ContextLoader.properties)后,web容器啟動時(shí)會調(diào)用ContextLoaderListener的contextInitialized方法。

contextInitialized方法里初始化ContextLoader.properties配置的org.springframework.web.context.support.XmlWebApplicationContext,這個初始化過程有點(diǎn)長。
4.1 從ServletContext獲取對象springcontext對象,如果存在則拋異常。key=org.springframework.web.context.WebApplicationContext.ROOT
4.2 從ContextLoader.properties獲取className=org.springframework.web.context.support.XmlWebApplicationContext
4.3 通過ClassUtils工具實(shí)例化spring的ApplicationContext,我們能夠看出他是使用ContextLoader類的類加載器,這里有個可以弄個知識點(diǎn)《ClassUtils知識點(diǎn)》

ClassUtils.forName(contextClassName, ContextLoader.class.getClassLoader())

4.4 XmlWebApplicationContext實(shí)例化時(shí),其一些列父類也將初始化和實(shí)例化(我稍微地簡化說,具體的可以看源碼):

層次 類名 作用
第0層 org.springframework.web.context.support.XmlWebApplicationContext 定義默認(rèn)配置文件,如/WEB-INF/applicationContext.xml
第1層 org.springframework.web.context.support.AbstractRefreshableWebApplicationContext 聲明了ServletContext servletContext和ServletConfig servletConfig
第2層 org.springframework.context.support.AbstractRefreshableConfigApplicationContext 此時(shí)就跟web沒多大關(guān)系了,定義了配置變量String[] configLocations
第3層 org.springframework.context.support.AbstractRefreshableApplicationContext 此層就重要了,定義了DefaultListableBeanFactory beanFactory
第4層 org.springframework.context.support.AbstractApplicationContext 此層定義了父context,還有ApplicationContext的其他配置等,refresh()方法
第5層 org.springframework.core.io.DefaultResourceLoader 此層與ApplicationContext沒多大關(guān)系,從包名也能看出,聲明了ClassLoader
第6層(最后一層) org.springframework.core.io.ResourceLoader spring的作者的注釋是Strategy interface for loading resources,嗯哈,大概猜是使用策略模式的接口

實(shí)例化完XmlWebApplicationContext類后,就開始做點(diǎn)事情了。在ContextLoader里,有個方法configureAndRefreshWebApplicationContext(cwac, servletContext),從方法名就能看出是配置和刷新ApplicationContext。
5.1 設(shè)置ServletContext,參考第1層
5.2 設(shè)置configLocations,參考第2層,這里又一個知識點(diǎn)《StringUtils知識點(diǎn)》
5.3 調(diào)用AbstractRefreshableWebApplicationContext的createEnvironment()方法來初始化StandardServletEnvironment對象。參考知識點(diǎn)《StandardServletEnvironment知識點(diǎn)》
5.4 調(diào)用StandardServletEnvironment對象initPropertySources(ServletContext servletContext, ServletConfig servletConfig)方法來獲取web容器所有配置信息。配置信息都在放在StandardServletEnvironment對象的MutablePropertySources對象里。
5.5 customizeContext(sc, wac)自定義初始化applicationContext的一些信息,里面是獲取實(shí)現(xiàn)org.springframework.context.ApplicationContextInitializer接口的一些方法調(diào)用。一個知識點(diǎn)也誕生《ApplicationContextInitializer知識點(diǎn)》

5.6 重頭戲來了,refresh ApplicationContext!!!,調(diào)用第4層的refresh()方法。

  5.6.1 第一步:加載ServletContext和ServletConfig參數(shù),并使用PropertySourcesPropertyResolver校驗(yàn)是否有必須的配置缺失,可參考知識點(diǎn)《PropertySourcesPropertyResolver知識點(diǎn)》。
  
  5.6.2 第二步:實(shí)例化BeanFactory,交給子類AbstractRefreshableApplicationContext來實(shí)例化(參考第3層),實(shí)例化了org.springframework.beans.factory.support.DefaultListableBeanFactory對象作為變量beanFactory的值。并配置是否允許覆蓋bean和是否允許循環(huán)引用,默認(rèn)都是否。
  
  
  5.6.3 第三步:第3層AbstractRefreshableApplicationContext去loadBeanDefinitions,loadBeanDefinitions方法被子類XmlWebApplicationContext覆寫了,創(chuàng)建org.springframework.beans.factory.xml.XmlBeanDefinitionReader對象進(jìn)行加載Bean的定義。這個是重點(diǎn)核心的知識點(diǎn),參考《XmlBeanDefinitionReader知識點(diǎn)》。  
   
  看到這里應(yīng)該知道每一層ApplicationContext的作用吧,一層一層往上遞進(jìn)
  
  5.6.4 第四步: //TODO 正在研讀XmlBeanDefinitionReader

//TODO

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67936.html

相關(guān)文章

  • spring-framework的Resource知識點(diǎn)

    摘要:接口類三個具有代表性的實(shí)現(xiàn)類通過的和,我們找到利用去解析路徑配置文件的路徑。上面可能講的有點(diǎn)繞,但卻是入口之一。根據(jù)路徑的特性,分別封裝為或?qū)ο蟆A硗庥冒锏淖隽藢?shí)驗(yàn),發(fā)現(xiàn)可以讀到包里的信息。則是包的根地方,如,用于公共配置文件。 接口類:org.springframework.core.io.Resource 三個具有代表性的實(shí)現(xiàn)類: org.springframework.we...

    Jonathan Shieber 評論0 收藏0
  • 基于注解方式配置springMVC 并整合mybatis(一)

    摘要:在實(shí)戰(zhàn)一書中前面兩部分分別介紹了和的高級特性,并且基于類配置有一套層的,但是沒有將層整合層,于是我試著整合了下,也方便以后寫測試。 在《springBoot實(shí)戰(zhàn)》 一書中前面兩部分分別介紹了spring 和 springMVC的高級特性,并且基于java類配置有一套web層的demo,但是沒有將web層整合dao層,于是我試著整合了下,也方便以后寫測試demo。下面是我的整理 pom....

    岳光 評論0 收藏0
  • Electrum 錢包源碼研讀(一)

    摘要:一首先從網(wǎng)上下載代碼導(dǎo)入公鑰并驗(yàn)證源碼簽名,命令如下二對代碼進(jìn)行安裝,命令如下三安裝完畢之后,我們可以在終端中輸入如下命令來查看幫助的信息如下運(yùn)行運(yùn)行守護(hù)程序使用一個未使用過的地址創(chuàng)建一個付款請求 一、首先從網(wǎng)上下載代碼、導(dǎo)入gpg公鑰并驗(yàn)證源碼簽名,命令如下: wget https://raw.githubusercontent... gpg --import ThomasV.a...

    or0fun 評論0 收藏0
  • Spring筆記03_AOP

    摘要:介紹什么是在軟件業(yè),為的縮寫,意為面向切面編程,通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。切面是切入點(diǎn)和通知引介的結(jié)合。切面類權(quán)限校驗(yàn)。。。 1. AOP 1.1 AOP介紹 1.1.1 什么是AOP 在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)...

    blair 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<