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的机制,通过反射来调用相应的方法来处理请求。
想要了解更多内容?