可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

Spring框架基础知识-常用的接口2(spring实现接口)

ResponseErrorHandler

基本概念

ResponseErrorHandler是Spring RestTemplate中用于处理HTTP响应错误的接口,允许自定义错误处理逻辑。

源码



执行流程

RestTemplate处理响应的步骤:

1、发送HTTP请求

2、接收响应

3、调用hasError()判断是否有错误

4、如果有错误,调用handleError()处理错误

5、如果无错误,正常返回响应数据

默认实现

Spring提供的默认实现
DefaultResponseErrorHandler



默认情况下,4xx和5xx状态码被认为是错误,会抛出相应的异常。

自定义错误处理

1、基础自定义示例



2、继承默认实现



配置使用

1、设置到RestTemplate



2、在使用时临时设置



注意事项

1、响应流只能读取一次

response.getBody()返回的流只能读取一次,如果需要多次使用,要先缓存内容。

2、异常类型选择

根据业务需要选择合适的异常类型,便于上层代码统一处理。

3、日志记录

在处理错误时应该记录适当的日志,便于问题排查

与其他组件的集成

ResponseErrorHandler经常与RestTemplate的其他组件配合使用:

1、
ClientHttpRequestInterceptor:请求拦截

2、MessageConverter:消息转换

3、ClientHttpRequestFactory:请求工厂

这个接口是RestTemplate错误处理的核心,通过自定义实现可以实现灵活的错误处理策略,提高API调用的健壮性和用户体验。

MultiValueMap

基本概念

MultiValueMap 是 Spring 框架提供的一个特殊 Map 接口,用于处理一个键对应多个值的场景。它是 Spring 框架中处理 HTTP 请求参数、HTTP 头等多值数据结构的核心接口。

源码



与普通Map 的区别



主要实现类

1、LinkedMultiValueMap - 基于 LinkedHashMap 的实现,保持插入顺序

2、
LinkedCaseInsensitiveMultiValueMap
- 键不区分大小写的版本

3、CopyOnWriteMultiValueMap - 线程安全的实现

方法

void add(K key, @Nullable V value)

void addAll(K key, List<? extends V> values);

示例代码



结果:


ClientHttpRequestInterceptor

基本概念

Spring Web的
ClientHttpRequestInterceptor接口用于拦截HTTP客户端请求,可以在
请求发送前和响应返回后进行统一处理

源码



方法

ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)

基本实现

简单拦截器



配置使用

1、RestTemplate配置



2、直接使用



优点

1、统一处理横切关注点(认证、日志、监控等)

2、代码复用,避免重复

3、链式处理,灵活组合

4、对业务代码无侵入

使用场景

1、API认证和授权

2、请求/响应日志记录

3、性能监控和指标收集

4、请求重试和容错

5、请求签名和加密

6、统一错误处理

总结

简单理解:
ClientHttpRequestInterceptor就像HTTP请求的"过滤器",让你可以在请求发出前和响应返回后进行统一处理。

RequestCallback

基本概念

Spring的RequestCallback接口是RestTemplate中用于自定义HTTP请求的回调接口。

源码



作用

RequestCallback允许你在HTTP请求发送前对请求进行定制化处理,比如设置请求头、请求体、认证信息等。

使用场景

1、设置请求头



2、写入请求体



3、文件上传



在RestTemplate中使用



总结

RequestCallback的核心价值在于提供了对HTTP请求的完全控制权,让你能够精确定制每个请求的细节。

WebApplicationContext

基本概念

WebApplicationContext 是 ApplicationContext 的扩展。它具有 Web 应用,它与普通的 ApplicationContext 在解析主题和决定程序所需的一些额外功能。与哪个 servlet 关联的能力方面有所不同。

源码



方法

ServletContext getServletContext();

只有这一个方法。

特点

WebApplicationContext在普通ApplicationContext基础上增加了Web相关功能,主要是与ServletContext的集成。

主要功能

1、访问ServletContext



2、Web作用域支持

支持Web特有的Bean作用域

request - 每个HTTP请求一个实例

session - 每个HTTP会话一个实例

application - 整个Web应用一个实例



3、层次化结构

典型的Web应用有两层ApplicationContext



应用场景

1、在Controller中获取



2、通过ServletContext获取



3、配置示例



核心价值

WebApplicationContext将Spring容器与Web环境无缝集成,让你可以:

1、在Web组件中轻松使用Spring管理的Bean

2、利用Web特有的作用域

3、访问ServletContext等Web资源

4、实现Web应用的依赖注入

它是Spring Web应用的核心基础设施。

InitializingBean

基本概念

InitializingBean接口为bean提供了初始化的方法,它只包括afterPropertiesSet方法,凡是实现该接口的类,在初始化bean的时候会执行该方法。在Spring初始化bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。

源码



测试程序



配置文件:



Main主程序:



运行主程序,结果:



这说明在Spring初始化Bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。

问题

实现InitializingBean接口与在配置文件中指定init-method有什么不同?

修改配置文件,加上init-method配置,修改如下:



运行结果如下:



由结果可看出,在spring初始化bean的时候,如果该bean是实现了InitializingBean接口,并且同时在配置文件中指定了init-method,系统则是先调用afterPropertiesSet方法,然后在调用init-method中指定的方法。

总结

(1)Spring为bean提供了两种初始化bean的方式,实现InitializingBean接口,实现afterPropertiesSet方法,或者在配置文件中同过init-method指定,两种方式可以同时使用

(2)实现InitializingBean接口是直接调用afterPropertiesSet方法,比通过反射调用init-method指定的方法效率相对来说要高点。但是init-method方式消除了对Spring的依赖。

(3)如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言