Spring MVC运行流程
一、配置阶段
①web.xml
②DispatcherServlet //Spring MVC总入口
③配置初始化参数 //classpath:application.xml,用于配置无数个bean
④servlet 请求路径配置,如/web/url, /*.json等
二、初始化阶段
① 调用 servlet 的init方法 //被web容器调用,如Tomcat,jetty
(以下是servlet 的init方法做的事情)
②找到配置文件所在路径,即加载application.xml中的内容,并解析
③扫描相关联的class(根据用户配置的包名去扫描)
④IOC容器的初始化
(IOC容器就是一个Map,类似(beanID,实例),即key是beanID,value是实例。默认情况下,以首字母小写的类名作为beanID。如果用户自定义了ID,那么优先使用用户定义的ID)
⑤依赖注入DI
(如果声明的类中,有需要注入的属性,即定义了成员变量,且需要赋值,那么spring会给此成员变量自动赋值)
⑥初始化一个HandlerMapping(HandlerMapping也是个Map, 其作用是将URL和@Controller中的某个方法进行一对一的关联,保存到一个Map中)
三、运行阶段
①service方法(分发 doGet/doPost方法,用户一旦在浏览器中输入一个URL,web容器就会自动调用该service方法)
②调用一个doDispatch方法(根据用户请求的URL去匹配已经初始化完毕的HandlerMapping中的Method)
③通过反射机制,动态调用上一步匹配到的Method,获取到返回值
④通过Response 输出
总结:
核心内容:
①加载配置文件
②扫描所有相关的类(一般是被托管的类,即有注解的类),将类名放到一个list (命名为classNames)中
③遍历list classNames,将所有相关Class的实例初始化,并且将其保存到IOC容器之中
④遍历ioc,进行自动化依赖注入
⑤初始化HandlerMapping,将URL与方法一一映射,存到map中(命名为handlerMapping)
⑥用户请求的时候做分发,去handlerMapping中寻找相对应的方法进行执行