1.通過ContextLoaderListener創建根級applicationContext,初始化應用上下文
,而DispatcherServlet只是在一個web應用中的一個總的控制器,在此控制器中
,根據ContextLoaderListener創建的應用上下文來創建以DispatcherServlet名
字-servlet.xml的web層應用上下文。具體可以參見web.xml中對此的英文解釋。
如果想換另外的名字話則要在web.xml的DispatcherServlet的屬性中進行設置,
否則系統只會查找默認的[servletName]-servlet.xml,并將其中的beans讀入
beanFactory。它們的初始化bean工廠的過程可以參考網上關于spring源碼學習的
一篇文章。
2.在DispatcherServlet初始化handlerMapping的時候,有個參數可以進行設置,
如autoDetectHandlerMapping,如果它為true的話,程序自動在容器的
BeanFactory中查找handerMapping的實例,然后存入HandlerMappings中,
BeanNameUrlHandlerMapping在初始化時將以"/"為首的bean和url一起讀入本實例
中的map中,其他的mapping方法有各自的做法,差不多類似。
3.以默認的handlerMapping為映射器的控制器,它們的bean是name,且它們的
name中一定要以"/"為首,否則控制器找不到,而以simpleUrlHanlerMapping為映
射的控制器,它們的bean一定要用id。
4.在建立application上下文時,會建立beanfactroy,然后對此默認的
beanfactory加入BeanPostProcessor的具體實現
ApplicationContextAwareProcessor,這樣在beanfactroy中的所有bean初始化時
都將回調ApplicationContextAwareProcessor,在這個類中篩選了一些接口的繼
承bean,對這些bean進行相應的注入,e.g setApplicationContext()中又定義
了初始化initApplication()的方法,然后繼續完成bean的初始化。
5.spring中的SimpleFormController方法中,如果通過bean定義加入
commandClass,則不需要在SimpleFormController的繼承方法formBackingObject
()中加入創建commandclass的代碼,這個方法的目的就是在request在post提交
的時候創建表單對象,并且自動提取和設置表單對象的值
6.web.xml中的配置參數,比如:
?<init-param>
??<param-name>contextConfigLocation</param-name>
???????? <param-value>/WEB-INF/hrms-servlet.xml</param-value>
??? </init-param>
?? <init-param>
?? <param-name>namespace</param-name>
?? <param-value>tttttttttttttttt</param-value>
??????? </init-param>
這個設置可能是通過下面代碼進行綁定的,主要過程是,將HttpServletBean中的
初始化時將servlet設置成bean,通過BeanWrapperImpl實現。根據web.xml中的數據進行動態設定serlet的值
。而根ApplicationContext中則是通過去讀取配置文件,然后賦值進行的。
PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig
(), this.requiredProperties);
???BeanWrapper bw = new BeanWrapperImpl(this);
???ResourceLoader resourceLoader = new
ServletContextResourceLoader(getServletContext());
???bw.registerCustomEditor(Resource.class, new
ResourceEditor(resourceLoader));
???initBeanWrapper(bw);
???bw.setPropertyValues(pvs, true);