3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神

今日分享开始啦 , 请大家多多指教~
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
Servlet生命周期了解
Servlet的生命(周期)是由容器(eg:Tomcat)管理的 , 换句话说 , Servlet程序员不能用代码控制其生命 。
加载和实例化:时机取决于web.xml的定义 , 如果有x则在容器启动时(eg:SSM) , 反之则在第一次针对这个Servlet的请求发生时(eg:SpringBoot) 。
初始化(init):实例化后会立马进行初始化 , 也就是执行init方法 , init方式只会执行一次 。
请求处理:初始化后 , Servlet就可以接受请求了,基本方式是执行Servlet接口中的service方法 。
终止服务:容器会在合适的时候销毁某个Servlet对象 , 这个策略取决于容器的开发者/商 , 销毁时destroy方法会被调用 。
核心处理请求流程图
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
入口
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
前端控制器DispatcherServlet也是一个Servlet , 他父类的父类HttpServletBean覆写了Servlet接口的init方法 , 在容器第一次加载或者第一次请求时会触发(延迟加载) , 这个方法是SringMvc初始化的入口 。
启动初始化
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
容器启动
Spring容器启动过程 , 会执行Bean的加载、创建和初始化 , 此处以Controller层为例分析 , 暂不关注其他类型资源 。
RequestMappingHandlerMapping类也是其中一个Bean , 负责解析所有标识有@Controller或者@RequestMapping注解的Bean 。
RequestMappingHandlerMapping的父类实现了InitializingBean接口 , 覆写了afterPropertiesSet方法 , 该接口是Spring的扩展点之一 , 在Bean初始化过程中 , 所i有属性注入完毕之后 , 会执行一系列回调(回调入口:AbstractAutowireCapableBeanFactory#initializeBean) , 其中一个回调会验证当前类是否实现了InitializingBean接口 , 如果实现了会调用afterPropertiesSet方法 , 此方法是解析Controller层路径和方法对应关系的入口 。
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神】解析完毕之后会存储在AbstractHandlerMethodMapping#MappingRegistry中 , 控制器方法HandlerMethod存储了当前路径对应方法的主要信息,它只负责准备数据 , 封装数据 , 而而不提供具体使用的方式方法 。
在接收请求时会先根据路径从urlLookup中获取匹配条件 , 然后根据匹配条件获取控制器方法HandlerMethod 。
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
策略初始化
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
映射器初始化
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
适配器初始化(和映射器逻辑一致)
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神
文章图片
请求处理
流程图
3天熟练掌握SpringMVC的14个顶级技巧,学完快速渡劫变大神