目录

  • Spring执行流程图
  • 简单了解几个大类的走的流程和具体功能
  • 分析几个接口的具体实现类
  • 另外补充采用非xml方式实现


Spring执行流程图

注意观察:每一个执行步骤的结果都会返回到DispatcherServlet ,然后再出发调用,

所以是请求接口的入口也是出口。

java 调用spring的db方法 spring执行流程_SpringMvc

简单了解几个大类的走的流程和具体功能

DispatcherServlet 类

中文调度应用程序,而Servlet就是被调用的对象,中央调度员处理员,是中枢。
通俗讲:就是接收客户端发送请求,然后再进行响应给客户端。
这中间执行的过程都是通过这个类去调用接口HandlerMapping、HandlerAdapter找他们的实现方法,
来完成从请求到响应的过程的。
响应的形式形式是多样的。
 DispatcherServlet 是前置控制器,配置在web.xml文件中的。拦截匹配的请求,
 Servlet拦截匹配规则要自己定义,把拦截下来的请求,
 依据相应的规则分发到目标Controller来处理,是配置spring MVC的第一步。

HandlerMapping 接口

通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,
它包括一个处理器、多个HandlerInterceptor拦截器其中是包含的是可以请求的和不可以请求的
就是黑名单和白名单);

HandlerExecutionChain 类

主要甄别 白名单还是黑名单访问请求接口,黑名单拒绝
主要执行的是在接口@Controller 方法前、中、后执行的方法
在RequestMappingHandlerAdapter 内的
执行addInterceptors 目的是将我们配置好的应该处理和拦截的接口集合添加到源码的集合中
1.而预处理就会穿插在这个地方,主要是处理接口方法的前,中,后执行的方法,比如session登录就适合在preHandle前提是某个类实现了HandlerInterceptor接口preHandle才生效,然后再 implements WebMvcConfigurer,
实现注入接口list中
2.(两个list,一个list是处理接口,一个lists是不处理的就是拦截器(本质是数组))在已经注册到处理器中查询请求是否在其中

HandlerAdapter

寻找具体@Controller接口处理程序 Handler
1.适配器   源码中是根据请求的接口,遍历已经被注册到接口集合中元素,寻找和请求接口一样的接口对象,然后返回集合元素中此接口,为的就是找集合元素中的接口实现方法
由此找到对应的适配器,也就是我们代码中具体的@control层中RequestMapping(),面向接口编程。
2.装配工作,在找到对应接口的时候,会根据接口注解@Autowired进行装配其具体哪个@Service

Handler

Handler : 绑定了注解@RequestMapping和@Controller的类
在查找到Handler适配器时候发起对方法调用的便是用ServletInvocableHandlerMethod

InternalResourceViewResolver

主要作用是视图解析器,解析具体的view视图,就是解析具体返回的哪个页面

HandlerMethod

在Handler下某个绑定@RequestMapping注解的方法(GetMapping、PostMapping...等都绑定的有注解@RequestMapping,spring mvc在做注解解析处理生成代理对象等的时候,会做值的合并等处理,所以最终都是用RequestMapping的注解来计算,
所以@Controller和@RestController的处理等同)
有两个子类,分别为InvocableHandlerMethod和ServletInvocableHandlerMethod

java 调用spring的db方法 spring执行流程_java 调用spring的db方法_02

InvocableHandlerMethod

解析、转换、执行、返回数据视图的核心方法
利用 RequestMappingHandlerAdapter 中的 invokeHandlerMethod 方法可以调用 HandlerMethod
就是将请求处理完成后的结果进行如何行成展示的过程

## HandlerMethod
访问到方法、方法参数、方法上的注解、所属类等并且对方法参数封装处理,也可以方便的访问到方法参数的注解等信息。
有了这个 Map,就可以在请求到达时,快速完成映射,找到 HandlerMethod 
并与匹配的拦截器一起返回给 DispatcherServlet

ServletInvocableHandlerMethod

在InvocableHandlerMethod的基础上增加了返回值和响应状态码的处理,另外ServletInvocableHandlerMethod有个内部类ConcurrentResultHandlerMethod继承于它,支持异常调用结果处理。
在查找到Handler适配器时候发起对方法调用的便是用ServletInvocableHandlerMethod。

DispatcherServlet

目的:行程闭环
从DispatcherServlet开始,接收请求,响应请求,并回到DispatcherServlet这儿出口返回客户端。
都是以DispatcherServlet为基础,进行四处奔波,最后回到客户端

注意观察:每一个执行步骤的结果都会返回到DispatcherServlet ,然后再出发调用,
所以是请求接口的入口也是出口。

分析几个接口的具体实现类

HandlerMapping 和 RequestMappingHandlerMapping 关系

后者实现前者接口进行将类中含有注解是RequestMapping进行注册到bean中,
就是放在容器中,行成映射Map关系,等待web请求映射调用

HandlerAdapter 和 RequestMappingHandlerAdapter 关系

RequestMappingHandlerAdapter 实现前者寻找具体@Controller接口
RequestMappingHandlerAdapter被包装成适配器,适合多种请求的处理,
调用控制器方法、并处理方法参数与方法返回值

另外补充采用非xml方式实现

WebMvcConfigurer 接口

采用实现WebMvcConfigurer接口的形式
根本目的:尽可能代替传统的xml文件的Javabean注册配置的形式
需要实现此接口类添加注解 @Configuration 
@Configuration注解表明这个类是一个配置类。
可以启动组件扫描,用来将带有@Bean的实体进行实例化bean等
实现此接口可以定义请求访问规则,定义拦截器和预处理机制
1.addInterceptors:拦截器
2.addViewControllers:页面跳转
3. addResourceHandlers:静态资源
4. configureDefaultServletHandling:默认静态资源处理器
5. configureViewResolvers:视图解析器
6. configureContentNegotiation:配置内容裁决的一些参数
7. addCorsMappings:跨域
8. configureMessageConverters:信息转换器