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);