Spring WebMVC启动流程

Spring WebMVC启动流程


WebMVC架构
MVC(Model-View-Controller)的概念
Model:模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View:负责展示模型,也就是一般看到的用户界面。
Controller:负责接收用户请求,交给模型进行处理,完毕后把数据返回给视图,由视图负责展示。
WebMVC架构
Servlet注册
DispatcherServlet本身就是一个Servlet,它的本质上是一个Servlet,只是子类不断的对HttpServlet父类进行方法扩展,它是特殊的servlet,SpringMVC的所有请求都是通过它来进行请求处理的。
注册流程
1、初始化创建,一般使用DispatchServlet类。
2、DispatchServlet的父类FrameworkServlet会重写父类的initServletBean方法,调用initWebApplicationContext()以及onRefresh()方法。
3、initWebApplicationContext()方法会创建一个当前servlet的一个IoC子容器。
4、读取标签的配置的xml文件并加载相关Bean。
5、onRefresh()方法创建Web应用相关组件。

在这里插入图片描述
在web.xml中注册配置

IoC容器创建
IOC(Inversion Of Control):控制反转,它是框架共有的特性。
创建方法
1、基于XML配置的方式
2、基于Goovy脚本配置的方式
3、基于Java Config的配置注解方式

//创建基于注解的springIOC容器
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AopBeanConfig.class);
//创建基于配置文件的springIOC容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/beans.xml");

Web中创建IoC容器流程
在这里插入图片描述
重点步骤
1、prepareRefresh 准备刷新容器
2、obtainFreshBeanFactory 获取组件工厂
3、prepareBeanFactory 对组件工厂做各种预处理设置
4、postProcessBeanFactory 组件工厂的后置处理工作
5、invokeBeanFactoryPostProcessors 执行组件工厂后置处理器
6、registerBeanPostProcessors 注册组件后置处理器
7、initMessageSource 初始化消息源组件,用于消息绑定、消息解析等功能,并且提供解决方案
8、initApplicationEventMulticaster 初始化事件广播器
9、onRefresh 没有任何操作,留给子类继承,自定义子容器,在重写方法中操作
10、registerListeners 注册事件监听器
11、finishBeanFactoryInitialization 完成剩下的单实例bean的初始化
12、finishRefresh 完成容器刷新

Bean初始化
Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。Spring 容器会自动完成@bean对象的实例化。
三种配置方式
1、在XML中进行显示配置
2、使用Java代码进行显示配置
3、隐式的bean发现机制和自动装配
xml文件配置
在这里插入图片描述
整体流程
1、获取参数 name 对应的 beanName
2、检查缓存或者实例工厂中是否有对应的单例,若存在则进行实例化并返回对象,否则继续往下执行
3、执行 prototype 类型依赖检查
4、如果当前 beanFactory 中不存在需要的 bean,则尝试从 parentBeanFactory 中获取
5、将之前解析过程返得到的 GenericBeanDefinition 对象合并为 RootBeanDefinition 对象,便于后续处理
6、如果存在依赖的 bean,则进行递归加载
7、依据当前 bean 的作用域对 bean 进行实例化
8、如果对返回 bean 类型有要求,则进行类型检查,并按需做类型转换
9、返回 bean 实例
MVC流程
在这里插入图片描述
工作流程
1、用户发送请求至DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping
3、HandlerMapping找到处理器,生成处理器对象返回给DispatcherServlet
4、DispatcherServlet调用HandlerAdapter
5、HandlerAdapter调用具体Controller
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将执行结果ModelAndView返回DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewResolver
9、ViewResolver解析后返回View
10、DispatcherServlet将模型数据填充到View
11、DispatcherServlet响应用户

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值