在Java中,通过实现接口并重写其中的方法,可以获得许多预定义的功能。这种机制是Java多态性的一种体现,允许不同的类以统一的方式处理某些操作。以下是一些常见的例子
Spring框架
返回出参
ResponseBodyAdvice:在Spring
框架中,通过实现ResponseBodyAdvice
接口,可以对控制器方法的返回值进行自定义处理,比如添加统一的响应头、对返回数据进行封装等。
跟随系统启动
CommandLineRunner:同样是Spring
框架中的一个接口,实现它可以在Spring
应用启动时执行一些自定义的逻辑,比如数据初始化、系统参数检查等。
组件排序
Ordered:它主要用于设定Java
和Spring
组件的执行顺序或优先级。
Spring
框架中的Ordered
接口非常简单,只包含一个方法getOrder()
,该方法返回一个整数,用于表示顺序或优先级。数字越小,优先级越高,因此会先执行。例如,如果两个组件A和B都实现了Ordered
接口,A的getOrder()
返回1,B的getOrder()
返回2,那么在执行时,A会先于B执行。如果A和B都是1,则随机。
Java自带
过滤器
Filter
Filter
接口是Java Servlet
规范的一部分,Filter
接口定义了三个方法:init(FilterConfig)
, doFilter(ServletRequest, ServletResponse, FilterChain)
, 和 destroy()
。
Filter
的主要用途是在请求到达Servlet
之前或响应返回客户端之前,对请求或响应进行某些处理。这包括但不限于:
- 安全性检查:例如,验证用户是否已经登录,或者他们是否有权访问特定的资源。
- 日志记录:记录有关请求和响应的详细信息,这对于调试和监控应用程序非常有用。
- 数据转换:在请求或响应到达Servlet之前,对其数据进行修改或转换。
- 性能监控:测量和记录处理请求所需的时间,以评估和优化应用程序的性能。
- 资源管理:在请求处理结束时释放资源,例如关闭数据库连接或文件流。
在Spring Boot
中,可以通过注解(如@WebFilter
)或声明式方式在配置类中注册Filter
。Spring Boot
还提供了自己的过滤器实现,如OrderedFilter
,它扩展了Filter
接口,并添加了顺序控制,使得你可以更细粒度地控制过滤器的执行顺序。
请注意,尽管Spring Boot
提供了与Servlet
过滤器集成的便利,但它也推荐使用自己的HandlerInterceptor
拦截器机制,这是一种更灵活且Spring
感知的方式来拦截和处理请求。拦截器与过滤器在功能上相似,但它们是Spring MVC
特有的,并且与Spring
的生命周期和依赖注入机制更紧密地集成在一起。