一 springMVC 入口
web.xml; DispatcherServlet
二 初始化過程
1.尋找init();
查看DispatcherServlet時候時,繼承自servlet,肯定有初始化方法,DispatcherServlet繼承自FrameworkServlet
FrameworkServlet繼承自HttpServletBean
HttpServletBean繼承自HttpServlet,在HttpServlet中尋找到了init()方法
2.init做了那些事
HttpServletBean中,init方法中,通過 PropertyValues 包裝屬性,BeanWrapper 包裝bean ,ResourceLoader 加載資源文件,initServletBean執行,但是此方法是空的
因此需要在子類中查找此方法。
FrameworkServlet中對initServletBean進行了重寫,進入此方法中,首先是打印日志,其次執行initWebApplicationContext方法,進入initWebApplicationContext方法,調用了 configureAndRefreshWebApplicationContext方法,進入configureAndRefreshWebApplicationContext方法,ConfigurableEnvironment類負責配置文件是否起作用,在bean.xml中contex標簽中profile ="true";wac.refresh()方法
AbstractApplicationContext中重寫了refresh方法,此方法很重要
1.xml解析
2.annotation的支持
AbstractApplicationContext#refresh-->obtainFreshBeanFactory-->refreshBeanFactory
AbstractRefreshableApplicationContext#refreshBeanFactory-->loadBeanDefinitions(xml annotation)
AbstractXmlApplicationContext#loadBeanDefinitions-->loadBeanDefinitions-->loadBeanDefinitions
AbstractBeanDefinitionReader#loadBeanDefinitions-->loadBeanDefinitions
XmlBeanDefinitionReader#loadBeanDefinitions-->loadBeanDefinitions-->doLoadBeanDefinitions-->registerBeanDefinitions
DefaultBeanDefinitionDocumentReader#registerBeanDefinitions-->doRegisterBeanDefinitions-->parseBeanDefinitions 此處開始分流 解析xml分默認解析和自定義解析
解析xml parseDefaultElement 解析默認 import alias bean beans
parseCustomElement 解析自定義標簽
自定義解析: parseCustomElement
NamespaceHandler
<context:property-placeholder location="classpath:config.properties" profile="true" />
<!-- 加載數據庫配置文件 -->
<!-- 激活Spring注解方式:自動掃描,并注入bean -->
<context:component-scan base-package="com.dongnao" />
<context:annotation-config />
context找uri,beans有content對應的uri
spring.handlers里面就有uri對應的處理類,實現NamespaceHandler,會把這個命名空間對應的標簽對應的處理注冊進來
轉載于:https://www.cnblogs.com/xiaoxiannvBlog/p/9607926.html