扫码阅读
手机扫码阅读

Spring Boot 定义接口的方法是否可以声明为 private?

13 2024-11-06

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:Spring Boot 定义接口的方法是否可以声明为 private?
文章来源:
江南一点雨
扫码关注公众号

松哥已经完成了Spring Boot视频教程的制作,对于有兴趣的朋友,可以通过提供的链接查看详情。

在Spring Boot中,很少有人会将Controller中的接口方法定义为private,但是出于好奇,如果这样定义,会不会运行呢?这引出了对SpringMVC源码中HandlerMethod的探讨。

1.概览

HandlerMethod体系下的类并不多,包括:

  • HandlerMethod:封装Handler和具体处理请求的Method。
  • InvocableHandlerMethod:增加了调用功能。
  • ServletInvocableHandlerMethod:增加了对@ResponseStatus注解的支持和返回值的处理。
  • ConcurrentResultHandlerMethod:增加了对异步结果的处理。

2.HandlerMethod

2.1 bridgedMethod

首先,松哥介绍了bridgedMethod的概念,这是Java虚拟机在运行时创建的方法,用于处理泛型方法的桥接。

2.2 HandlerMethod介绍

HandlerMethod在确定handler类型后,可以构建HandlerMethod实例。它封装了方法参数(parameters)和处理方法的@ResponseStatus注解(responseStatus)。parameters是MethodParameter类型,用于封装方法调用的参数和返回值。responseStatus用于描述方法的响应状态码。

3.InvocableHandlerMethod

InvocableHandlerMethod能够调用HandlerMethod中的具体方法,也就是bridgedMethod。它包括属性resolvers(参数解析器),parameterNameDiscoverer(获取参数名称),和dataBinderFactory(创建WebDataBinder)。请求调用方法是invokeForRequest,通过反射调用实际的方法。

通过上述源码解读,我们了解到,Spring Boot允许Controller中的接口方法定义为private,并通过HandlerMethod和InvocableHandlerMethod的机制,通过反射来调用相应的方法来处理请求。

想要了解更多内容?

查看原文:Spring Boot 定义接口的方法是否可以声明为 private?
文章来源:
江南一点雨
扫码关注公众号