1

spring mvc

拦截器

请求流程

http容器->过滤器->servlet->拦截器->controller方法->拦截器->servlet->过滤器->http容器。
这是一个请求的回路,有进有出。

serlvet过滤器:
javax.servlet.Filter
1、由Servlet规范定义
2、不可以获得spring内部bean

springmvc拦截器:
org.springframework.web.servlet.HandlerInterceptor
1、spring web 内部定义
2、可以获得spring内部bean

HandlerInterceptor方法:
方法都有这三个参数:(HttpServletRequest request,HttpServletResponse response, Object handler)
1、preHandle
2、postHandle

有一个 ModelAndView modelAndView 参数
执行时间:DispatcherServlet渲染view之前

3、afterCompletion

另外有一个 Exception ex 参数
执行时间:在请求处理完成,渲染完view之后
作用:可以清理资源,处理异常

handler可能的实例是org.springframework.web.method.HandlerMethod,保持了最终被执行的方法,对应Controller中处理请求的具体方法。

映射与handler适配器

一、HandlerMapping 与 HandlerAdapter。

1、流程
DispatcherServlet 初始哈时加载所有的 HandlerMapping实例,所有HandlerAdapter实例。
请求过来的时候,从所有HandlerMapping实例中找到当前请求的Handler(如果框架使用的是RequestMappingHandlerMapping,得到的handler实例就是HandlerMethod)。
然后把handler封装成HandlerExecutionChain,然后在所有HandlerAdapter实例中获得可以支持该handler的HandlerAdapter(每个实例都有支持的handler的判断,框架默认的adapter是RequestMappingHandlerAdapter)。
拿到了hander和adapter就可以执行具体的业务代码了。

2、HandlerMapping:
org.springframework.web.servlet.HandlerMapping
此接口只定义一个方法:为了找到请求的执行程序。
如果已有的HandlerMapping实现中没有能够满足你所需要的规则时,可以通过实现HandlerMapping接口进行扩展
方法:
//返回此请求的处理程序和拦截器。
HandlerExecutionChain getHandler(HttpServletRequest request)

3、HandlerExecutionChain
HandlerExecutionChain中包含Handler和对应HandlerInterceptor实例:
org.springframework.web.servlet.HandlerExecutionChain

4、HandlerAdapter:
org.springframework.web.servlet.HandlerAdapter
该适配器使调用方与具体程序的执行解耦。
可以支持调用Object类型的执行程序。
可以与其它框架融合,spring mvc提供的扩展之一。
DispatcherServlet支持多个适配器。
方法:
//该adapter是否支持该handler实例
boolean supports(Object handler)
//具体的处理业务逻辑。使用hadnler处理request。
ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)

5、Handler:
与HandlerAdapter对应,一个HandlerAdapter支持特定的Handler。
经常用到的有
org.springframework.web.HttpRequestHandler,org.springframework.web.servlet.mvc.Controller,

spring boot

一、starter
实现starter步骤:
1、 starter 命名
2、 自动配置类,用来初始化相关的 bean
3、 指明自动配置类的配置文件 spring.factories
当 Spring Boot 启动的时候,会在 classpath 下寻找所有名称为 spring.factories 的文件,然后运行里面的配置指定的自动加载类
4、 自定义属性实体类,声明 starter 的应用配置属性

二、内置配置
META-INF/spring.factories:
springboot-autoconfigre jar包里有很多自动配置项。
也可以在自定义starter里定义自己的自动配置项。

META-INF/spring.provides:
文件格式:provides: spring-jdbc,spring-tx
spring.provides里的内容springboot也会自动引用

spring中注解工具

组合注解

AnnotationUtils 和 AnnotatedElementUtils

AliasFor 注解

参考
spring boot 过滤器、拦截器的区别与使用
Spring 注解(一)Spring 注解编程模型
Spring MVC HandlerMapping HandlerAdapter
SpringMVC执行流程及工作原理
HandlerAdapter初始化详解

肖圣贤
31 声望5 粉丝

学习让我充实


« 上一篇
关于索引