Spring像 GetMapping 这样的引导注解在内部使用 Spring AOP 吗?

Do SpringBoot annotations like GetMapping use Spring AOP internally?

来自 Spring 引导初学者的一个可能很愚蠢的问题。

我正在阅读有关 AOP 的资料,感觉很多注释的处理(包括 GetMappingPostMapping)与 AOP 天生契合 - 我们有一个共同的问题(例如,所有用 GetMapping 注释的函数都被视为 HTTP GET 方法)分布在许多不同的 类.

Spring 是否在内部使用 AOP 来实现它的处理程序来处理 GetMapping 之类的东西?

不,Spring 不使用 AOP 来为请求的 URI 找到正确的处理程序。

这基本上是 DispatcherServlet 的工作。

@GetMapping@PostMapping@PutMapping@PatchMapping@DeleteMapping都是各自@RequestMapping注解的快捷方式。

DispatcherServlet 是一个前端控制器,它处理传入的请求并将它们委托给正确的处理程序。

当请求到达时,DispatcherServlet 使用 WebApplicationContext 中的 HandlerMappingHandlerAdapter 将请求委托给适当的处理程序。当然,它要复杂得多,而且还有很多工程正在进行。

DispatcherServlet 不直接调用处理程序方法,而是使用 HandlerAdapter 接口。具体来说,对于 @RequestMapping 注释及其快捷方式,RequestMappingHandlerAdapter is used together with the RequestMappingHandlerMapping.

RequestMappingHandlerMappingDispatcherServlet 用来获取处理程序对象(当在 class 中使用 @RequestMapping 而不是方法时)和处理程序方法 (使用 @RequestMapping 时,它是方法中的快捷方式)。这个 class 负责为每个 @RequestMapping 注释的 class 或方法创建 RequestMappingInfo ,所以,基本上,它映射了相应的它的路径处理程序。

RequestMappingHandlerAdapter用于通过RequestMappingHandlerAdapter#invokeHandlerMethod调用handler方法(参见here

所以不,Spring 在这种情况下不使用 AOP。正在进行大量智能映射。