自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

键盘上流淌的日子

以我所知,传递知识,帮助在猿生中挣扎的人

  • 博客(222)
  • 收藏
  • 关注

原创 Spring 知识面面通 之 NamespaceHandler加载过程源码详解

  《Spring 知识面面通 之 自定义NamespaceHandler详解》博文中对自定义NamespaceHandler进行演示,本文会对NamespaceHandler的加载过程进行解析。​ NamespaceHandler加载过程流程  流程图中罗列了Spring加载配置的整个过程,其中,从BeanDefinitionParserDelegate.parseCustomElement(...)开始,即开始了对命名空间NamespaceHandler的解析,本文对这部分内容进行解析。  N

2021-01-29 16:16:27 1930

原创 Spring 知识面面通 之 自定义NamespaceHandler详解

  通常情况下,Spring生态圈提供的功能已足够使用,但不排除特殊情况下,需要匹配特殊及复杂的业务情况。Spring提供了可扩展Schema支持,可以自定义命名空间进行配置及解析。  自定义NamespaceHandler流程  自定义NamespaceHandler项目结构  1) 设计自定义配置。  设计配置包含id、name、sex、word、blob五个属性,同步创建JavaBean,用于属性载体。package com.arhorchin.securitit.hello.bean;

2021-01-28 17:43:14 2159

原创 Spring 注解面面通 之 @CrossOrigin 处理请求源码解析

  @CrossOrigin源码解析主要分为两个阶段:  ① @CrossOrigin注释的方法扫描注册。  ② 请求匹配@CrossOrigin注释的方法。  本文针对第②阶段从源码角度进行解析,关于第①阶段请参照《Spring 注解面面通 之 @CrossOrigin 注册处理方法源码解析》。  请求匹配@CrossOrigin注释的方法  请求匹配@CrossOrigin注释的方法流程:  1) DispatcherServlet.doDispatch(...)、DispatcherS

2021-01-27 16:19:02 5486 12

原创 Spring 注解面面通 之 @CrossOrigin 注册处理方法源码解析

  参照《Spring 注解面面通 之 @RequestMapping 注册处理方法源码解析》,其讲解了@RequestMapping注释的处理方法注册过程,而@CrossOrigin是基于@RequestMapping来应用的。  @CrossOrigin源码解析主要分为两个阶段:  ① @CrossOrigin注释的方法扫描注册。  ② 请求匹配@CrossOrigin注释的方法。  本文针对第①阶段从源码角度进行解析,关于第②阶段请参照《Spring 注解面面通 之 @CrossOrigin

2021-01-27 16:15:08 641 1

原创 Spring 注解面面通 之 @CrossOrigin 注解应用详解

  跨源资源共享(CORS),是由大多数浏览器实现的W3C规范,允许对跨域请求进行灵活授权,用来代替IFRAME或JSONP等非正规实现方式。  @CrossOrigin是用来处理跨源资源共享(CORS)的注解。  注解解析  ① value:    指定允许请求源列表,例如:value="http://example.com"。    *表示允许来自任意请求源的请求。    其值存储在响应标头Access-Control-Allow-Origin中。    默认情况下,其值为*,允许来自任意

2021-01-27 16:12:27 5415

原创 Spring 注解面面通 之 @RequestMapping produces 条件匹配源码解析

  @RequestMapping支持基于value、path、method、params、headers、consumers、produces的匹配,本文对基于params的匹配过程进行分析。  系列博文《Spring 注解面面通 之 @RequestMapping 请求匹配处理方法源码解析》中对请求匹配@RequestMapping注释方法流程进行了分析。  AbstractHandlerMethodMapping.lookupHandlerMethod(...)方法负责查找请求最佳匹配的处理方法。

2020-12-22 09:45:43 934

原创 Spring 注解面面通 之 @RequestMapping consumes 条件匹配源码解析

  @RequestMapping支持基于value、path、method、params、headers、consumers、produces的匹配,本文对基于params的匹配过程进行分析。  系列博文《Spring 注解面面通 之 @RequestMapping 请求匹配处理方法源码解析》中对请求匹配@RequestMapping注释方法流程进行了分析。  AbstractHandlerMethodMapping.lookupHandlerMethod(...)方法负责查找请求最佳匹配的处理方法。

2020-12-22 09:42:49 1028

原创 Spring 注解面面通 之 @RequestMapping headers 条件匹配源码解析

  @RequestMapping支持基于value、path、method、params、headers、consumers、produces的匹配,本文对基于params的匹配过程进行分析。  系列博文《Spring 注解面面通 之 @RequestMapping 请求匹配处理方法源码解析》中对请求匹配@RequestMapping注释方法流程进行了分析。  AbstractHandlerMethodMapping.lookupHandlerMethod(...)方法负责查找请求最佳匹配的处理方法。

2020-12-21 10:15:40 1005

原创 Spring 注解面面通 之 @RequestMapping params 条件匹配源码解析

  @RequestMapping支持基于value、path、method、params、headers、consumers、produces的匹配,本文对基于params的匹配过程进行分析。  系列博文《Spring 注解面面通 之 @RequestMapping 请求匹配处理方法源码解析》中对请求匹配@RequestMapping注释方法流程进行了分析。  AbstractHandlerMethodMapping.lookupHandlerMethod(...)方法负责查找请求最佳匹配的处理方法。

2020-12-21 10:13:19 734

原创 Spring 注解面面通 之 @RequestMapping method 条件匹配源码解析

  @RequestMapping支持基于value、path、method、params、headers、consumers、produces的匹配,本文对基于method的匹配过程进行分析。  系列博文《Spring 注解面面通 之 @RequestMapping 请求匹配处理方法源码解析》中对请求匹配@RequestMapping注释方法流程进行了分析。  AbstractHandlerMethodMapping.lookupHandlerMethod(...)方法负责查找请求最佳匹配的处理方法。

2020-12-21 10:08:30 413

原创 Spring 注解面面通 之 @RequestMapping 请求匹配处理方法源码解析

  @RequestMapping源码解析主要分为两个阶段:  ① @RequestMapping注释的方法扫描注册。  ② 请求匹配@RequestMapping注释的方法。  本文针对第②阶段从源码角度进行解析,关于第①阶段请参照《Spring 注解面面通 之 @RequestMapping 注册处理方法源码解析》。​  **注意:**请求匹配@RequestMapping注释方法的起点是DispatcherServlet.doDispatch(...)。  源码流程  下面列出了源码的

2020-12-19 11:49:23 1686 1

原创 Spring 注解面面通 之 @RequestMapping 注册处理方法源码解析

  @RequestMapping源码解析主要分为两个阶段:  ① @RequestMapping注释的方法扫描注册。  ② 请求匹配@RequestMapping注释的方法。  本文针对第①阶段从源码角度进行解析,关于第②阶段请参照《Spring 注解面面通 之 @RequestMapping 请求匹配方法源码解析》。  注意:@RequestMapping注释方法扫描注册的起点是RequestMappingHandlerMapping.afterPropertiesSet()。  <a

2020-12-19 11:44:50 472 1

原创 Spring 注解面面通 之 @PostConstruct 深入源码解析

  @PostConstruct的应用以及与afterPropertiesSet、init-method对比请查看《Spring 注解面面通 之 @PostConstruct 应用解析以及与afterPropertiesSet、init-method对比》。  @PostConstruct与InitializingBean的源码流程有一部分是重叠的,可以参考《Spring 知识面面通 之 InitializingBean 深入源码解析》。  Spring利用BeanPostProcessor后置处理器来

2020-12-18 10:06:16 1314

原创 Spring 注解面面通 之 @PostConstruct 应用解析以及与afterPropertiesSet、init-method对比

  简介  JSR-250规范为Bean初始化之后/销毁之前方法指定了两个注解:@PostConstruct和@PreDestroy,这两个注解可以应用在方法级别上,@PostConstruct注释方法在Bean实例化之后、应用注入之前调用,@PreDestroy注释方法在Bean实例销毁之前调用。  @PostConstruct和@PreDestroy规范中要去较为严格,但Spring在实现时,并未完全按照其规范实现,在Spring中应用@PostConstruct和@PreDestroy这两个注解,

2020-12-18 09:52:37 3607 2

原创 Spring 注解面面通 之 @ModelAttribute 深入源码解析

  @ModelAttribute应用请参照《Spring 注解面面通 之 @ModelAttribute 模型属性绑定全解》。  @ModelAttribute可以注释方法和参数,那么源码分析也从这两个方向进行分析。  源码流程  流程图中,左侧为@ModelAttribute注释方法的处理过程,右侧为@ModelAttribute注释参数的处理过程。  需要说明的是,流程图中,由于整个过程比较复杂,图中只是简单绘制与@ModelAttribute注解处理相关的内容,其他部分未列其内。此图并不代

2020-12-17 09:37:37 536

原创 Spring 注解面面通 之 @ModelAttribute 模型属性绑定全解

  @ModelAttribute用于将方法参数或返回值绑定到Model属性上,并公开给Web视图。支持使用@RequestMapping注释的Controller类。  注解解析  ① value:    待绑定到Model属性的键名称。    默认Model属性键名称根据非限定类名从声明的属性类型(即方法参数类型或方法返回类型)推断而来:    mypackage.OrderAddress类型对应的键名称是orderAddress 。    List<mypackage.OrderAd

2020-12-17 09:32:15 2736

原创 Spring 知识面面通 之 HandlerInterceptorAdapter 深入应用与源码解析

  HandlerInterceptorAdapter常被称为处理器拦截适配器,用来对HandlerInterceptor和AsyncHandlerInterceptor接口进行整合适配。实际应用中,HandlerInterceptor应用频率较高,相反,异步处理的AsyncHandlerInterceptor应用频率较低,因此本文更多讨论的是HandlerInterceptor。  HandlerInterceptorAdapter 应用示例  应用HandlerInterceptorAdapter和

2020-12-15 18:41:58 1296

原创 Spring 知识面面通 之 MappedInterceptor HandlerInterceptor的实现真谛

  应用Spring的HandlerInterceptor处理器拦截器时,首先需要自定义类,其实现HandlerInterceptor接口,然后配置已定义的HandlerInterceptor实现类,最后就可以享受拦截器带来的便利。  表面上,HandlerInterceptor是实现的关键。但实际上,内部实现时,MappedInterceptor是拦截器实现的精髓,其对HandlerInterceptor实现类进行了封装,Spring流程操作通过MappedInterceptor间接地与HandlerI

2020-12-15 13:39:21 1521

原创 Spring 知识面面通 之 HandlerInterceptor 处理器拦截器深入源码解析

  简介  HandlerInterceptor可以为某些处理器注册任意数量已有或自定义的拦截器,用于添加预处理行为,而无需更改具体处理器实现。  HandlerInterceptor的源码分为两个过程:拦截器查找过程和拦截器应用过程。  拦截器查找过程  HandlerInterceptor拦截器的查找主要在org.springframework.web.servlet.handler.AbstractHandlerMapping类中。  org.springframework.web.serv

2020-12-15 07:08:59 668

原创 Spring 知识面面通 之 HandlerInterceptor 处理器拦截器应用详解

  HandlerInterceptor是Spring MVC的处理器拦截器,其功能类似于Servlet的Filter,用于在不通过阶段对处理器进行处理。  HandlerInterceptor解析  可以为某些处理器注册任意数量已有或自定义的拦截器,用于添加预处理行为,而无需更改具体处理器实现。  HandlerInterceptor包含三个方法:preHandle(...)、postHandle(...)和afterCompletion(...)。  1) preHandle(...):  ①

2020-12-15 06:49:08 1539

原创 Spring 注解面面通 之 @PostMapping、@GetMapping、@PutMapping、@DeleteMapping、@PatchMapping

  @RequestMapping注解可以查看《Spring 注解面面通 之 @RequestMapping》。  @PostMapping、@GetMapping、@PutMapping、@DeleteMapping、@PatchMapping是在@RequestMapping基础进行细化的注解,一般注释方法时,推荐使用这些细化注解,可以更明确地表达映射的Http方法。  注解解析  ① 对应关系。  @PostMapping <–> RequestMethod.POST。  @Ge

2020-12-12 15:43:35 3137

原创 Spring 注解面面通 之 @RequestMapping

  @RequestMapping用于将Web请求映射到具体处理器的处理方法上。  注解解析  @RequestMapping可用于类级别和方法级别,一般在类级别使用,用于定义整个控制器内的映射基础。大多数情况下,在方法级别会更倾向于使用@GetMapping、@PostMapping、@PutMapping、@DeleteMapping或@PatchMapping等含义更加具体的注解,使表述更明确。  需要注意的是,当使用控制器接口(例如,用于AOP代理)时,请确保将所有映射注释(例如@Reques

2020-12-12 13:30:56 456

原创 Spring 知识面面通 之 DispatcherServlet请求入口源码解析

  关于Spring的启动入口,在本博《Spring 通篇源码 之 启动 之 程序入口分析》已有介绍,其更多的是在理论层面进行了分析,本文将在源码的角度分析DispatcherServlet入口。  源码流程  DispatcherServlet是Spring MVC的流量入口,所有请求均由DispatcherServlet进入,经过系列处理,到达业务逻辑层。  实际上,DispatcherServlet不仅仅处理请求,而且具有ContextLoaderListener类似的功能,对WebApplic

2020-12-10 20:49:06 360

原创 Spring 知识面面通 之 ContextLoader启动入口源码解析

  关于Spring的启动入口,在本博《Spring 通篇源码 之 启动 之 程序入口分析》已有介绍,其更多的是在理论层面进行了分析,本文将在源码的角度分析ContextLoaderListener入口。  源码流程  以ContextLoaderListener作为入口的启动流程,如图中所示,直到AbstractApplicationContext.refresh(...)进行任务分解,本文仅对左侧部分进行解析,其余部分会在后续博文中进行讲解。  源码解析  1) ContextLoaderLi

2020-12-10 20:46:14 588

原创 Spring 知识面面通 之 InitializingBean 深入源码解析

  简介  InitializingBean  InitializingBean接口为Bean初始化提供了一种方式。  实现InitializingBean接口的Bean,在BeanFactory设置其所有属性后会调用其afterPropertiesSet()方法。可以在afterPropertiesSet()方法中执行自定义初始化、属性检查或强制校验等,若不满足要求可以抛出异常以中断Spring的加载流程。  InitializingBean应用时有几点需要注意:  ① Bean必须实现Init

2020-12-10 09:25:21 412

原创 Spring 知识面面通 之 BeanPostProcessor 源码流程解析

  BeanPostProcessor后置处理器的应用参照《Spring 知识面面通 之 BeanPostProcessor 后置处理器应用详解》,本文从源码层面来解析BeanPostProcessor是如何实现调用的。  源码解析  1) AbstractAutowireCapableBeanFactory.initializeBean(...)  从Spring整体架构上来看,BeanPostProcessor也属于Bean初始化的一部分,其源码实现位于org.springframework.be

2020-12-10 09:22:41 460

原创 Spring 知识面面通 之 BeanPostProcessor 后置处理器应用详解

  BeanPostProcessor  ① BeanPostProcessor是BeanFactory初始化Bean钩子,可用于对Bean进行自定义定制修改。  ② ApplicationContext可以自动检测到其中注册的BeanPostProcessor类型的Bean,并在随后应用到创建的任意的Bean。  ③ 普通Bean工厂允许编程注册方式注册后置处理器,应用于通过工厂创建的所有Bean。  ④ 填充Bean属性等操作通常实现postProcessBeforeInitialization

2020-12-10 09:18:38 378

原创 Spring 注解面面通 之 @ResponseStatus注释异常类源码解析

  简介  @ResponseStatus注解可以应用在两种应用场景下:  ① @ResponseStatus注释控制器类或方法,@ResponseStatus注解的属性用来为响应设置状态代码和状态原因。  ② @ResponseStatus注释异常类,用来解析指定类型异常,@ResponseStatus注解的属性用来为响应设置状态代码和状态原因。  接下来对第二种场景下@ResponseStatus的处理逻辑进行分析。  @ResponseStatus注释异常类  ① 主要调用流程。Disp

2020-12-07 13:21:16 451 1

原创 Spring 注解面面通 之 @ResponseStatus注释控制器类或方法源码解析

  简介  @ResponseStatus注解可以应用在两种应用场景下:  ① @ResponseStatus注释控制器类或方法,@ResponseStatus注解的属性用来为响应设置状态代码和状态原因。  ② @ResponseStatus注释异常类,用来解析指定类型异常,@ResponseStatus注解的属性用来为响应设置状态代码和状态原因。  接下来对第一种场景下@ResponseStatus的处理逻辑进行分析。  @ResponseStatus注释控制器类或方法  ① 主要调用流程。

2020-12-07 09:38:14 279

原创 Spring 注解面面通 之 @ResponseStatus、@ResponseBody

  @ResponseStatus和@ResponseBody都是用来处理响应相关内容的。  注解解析  @ResponseStatus  ① 使用@ResponseStatus注释的方法或异常类返回注解code和reason属性。  ② 当调用处理程序时,@ResponseStatus的code属性将应用于Http响应状态代码,并将重写其他方式已设置过的响应状态原因,例如:ResponseEntity或:redirect设置过的响应状态原因。  ③ 需要注意的是,在异常类上使用此注解或设置此注解

2020-12-07 09:35:44 690

原创 Spring 注解面面通 之 @RequestBody参数绑定源码解析

  Spring MVC中使用HandlerMethodArgumentResolver策略接口来定义处理器方法参数解析器,@RequestBody使用的是RequestResponseBodyMethodProcessor,接下来一起来深入了解一下其源码实现。  类结构​  类解析  1) RequestResponseBodyMethodProcessor实现相对比较负责,其功能涉及范围较广,参数绑定仅是其功能之一。  RequestResponseBodyMethodProcessor实现

2020-12-06 10:21:58 2418

原创 Spring 注解面面通 之 @RequestBody

  @RequestBody用于将完整请求正文映射到控制器处理方法的参数中,请求正文通过HttpMessageConverter进行转换。  注解解析  ① required:    请求正文是否必须有值,默认值为true。    required为true时,如果请求正文没有值,则会抛出异常。    required为false时,如果请求正文没有值,则会返回null。  注解示例  1) 建Controller,用来演示@RequestBody使用方法。package com.arhor

2020-12-05 18:24:09 457

原创 Spring 注解面面通 之 @RequestPart参数绑定源码解析

  Spring MVC中使用HandlerMethodArgumentResolver策略接口来定义处理器方法参数解析器,@RequestPart使用的是RequestPartMethodArgumentResolver,@RequestParam使用的是RequestParamMethodArgumentResolver,,接下来一起来深入了解一下其源码实现。  类结构  类解析  HandlerMethodArgumentResolver和AbstractNamedValueMethodAr

2020-12-05 18:18:01 1245

原创 Spring 注解面面通 之 @RequestPart

  @RequestPart用于将multipart/form-data类型数据映射到控制器处理方法的参数中。除了@RequestPart注解外,@RequestParam同样可以用于此类操作。  注解解析  ① value:    绑定的参数名称,参数值为String类型。  ② name:    绑定的参数名称,参数值为String类型。name和value可以同时使用,但两者的值需一致,否则会出现错误。attribute 'name' and its alias 'value' are p

2020-12-05 18:15:18 24941 1

原创 Spring 注解面面通 之 @RequestParam参数绑定源码解析

  Spring MVC中使用HandlerMethodArgumentResolver策略接口来定义处理器方法参数解析器,@RequestParam使用的是RequestParamMapMethodArgumentResolver和RequestParamMethodArgumentResolver,接下来一起来深入了解一下其源码实现。  类结构  类解析  HandlerMethodArgumentResolver和AbstractNamedValueMethodArgumentResolve

2020-12-05 18:11:17 4655 8

原创 Spring 注解面面通 之 @RequestParam

  @RequestParam用于将Web请求参数数据映射到控制器处理方法的参数中,支持Servlet和Portlet环境中的带注解的处理方法。  注解解析  ① value:    绑定的参数名称,参数值为String类型。  ② name:    绑定的参数名称,参数值为String类型。name和value可以同时使用,但两者的值需一致,否则会出现错误。attribute 'name' and its alias 'value' are present with values of [XX

2020-12-05 18:08:30 865

原创 Spring 注解面面通 之 Http测试工具

  学习和研究Spring框架的过程中,总是会涉及到Http请求的处理,无论是Get、Post、Head等等,本文来自己写一份用于Http测试的工具页面。  1) 建Controller,用于进行页面跳转和测试的后端服务。package com.arhorchin.securitit.tool;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServl

2020-12-05 18:05:28 392

原创 Spring 注解面面通 之 @RequestHeader参数绑定源码解析

  Spring MVC中使用HandlerMethodArgumentResolver策略接口来定义处理器方法参数解析器,@RequestHeader使用的是RequestHeaderMapMethodArgumentResolver和RequestHeaderMethodArgumentResolver,接下来一起来深入了解一下其源码实现。  类结构  类解析  HandlerMethodArgumentResolver和AbstractNamedValueMethodArgumentReso

2020-12-05 01:03:27 871

原创 Spring 注解面面通 之 @RequestHeader

  @RequestHeader用于将Web请求头中的数据映射到控制器处理方法的参数中。  注解解析  ① value:    绑定的参数名称,参数值为String类型。  ② name:    绑定的参数名称,参数值为String类型。name和value可以同时使用,但两者的值需一致,否则会出现错误。attribute 'name' and its alias 'value' are present with values of [XXX] and [XXX], but only one i

2020-12-05 00:50:25 2135

原创 Spring 注解面面通 之 @MatrixVariable参数绑定源码解析

  Spring MVC中使用HandlerMethodArgumentResolver策略接口来定义处理器方法参数解析器,@MatrixVariable使用的是MatrixVariableMapMethodArgumentResolver和MatrixVariableMethodArgumentResolver,接下来一起来深入了解一下其源码实现。  类解析  HandlerMethodArgumentResolver和AbstractNamedValueMethodArgumentResolve

2020-12-05 00:45:33 1128 11

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除