【问题标题】:Do SpringBoot annotations like GetMapping use Spring AOP internally?像 GetMapping 这样的 SpringBoot 注解在内部使用 Spring AOP 吗?
【发布时间】:2021-04-15 23:54:00
【问题描述】:

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

我正在阅读有关 AOP 的资料,并且感觉很多注释的处理(包括 GetMappingPostMapping)自然适合 AOP - 我们有一个共同的问题(例如,所有使用 @987654323 注释的函数@ 被视为 HTTP GET 方法)分布在许多不同的类中。

那么 Spring 内部是否使用 AOP 来实现其处理程序以处理 GetMapping 之类的内容?

【问题讨论】:

    标签: spring spring-boot aop spring-aop


    【解决方案1】:

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

    这基本上是 DispatcherServlet 的工作。

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

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

    当请求到达时,DispatcherServlet 使用来自WebApplicationContextHandlerMappings 和HandlerAdapters 将请求委托给适当的处理程序。当然,这要复杂得多,而且还有很多工程要做。

    DispatcherServlet 不直接调用处理程序方法,而是使用HandlerAdapter 接口。具体来说,在@RequestMapping 注释及其快捷方式的情况下,RequestMappingHandlerAdapterRequestMappingHandlerMapping 一起使用。

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

    RequestMappingHandlerAdapter 用于通过RequestMappingHandlerAdapter#invokeHandlerMethod 调用处理程序方法(参见here

    所以不,在这种情况下 Spring 不使用 AOP。很多智能地图都在进行中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多