首页 > 解决方案 > Spring中哪些模块和类负责Annotations的实现

问题描述

Spring 支持各种注解,其中库/模块/类/模式处理注解逻辑。spring 为@Controller、@RestController 实现注解行为... 示例:要添加新的自定义注解,我们添加 at-sign (@) 然后使用 Java 反射处理内容。那么在 Spring Framework 中,他们是如何做到这一点的,以及 Spring 在升级他们的注解版本时如何修改逻辑?

@PostConstruct 和@PreDestroy 是类InitDestroyAnnotationBeanPostProcessor 的句柄,所以@RestController 是哪个类句柄。我想了解@RestController 的spring 实现方式,因为我想添加一个新注释,其中包括@RestController 和我的额外逻辑。

标签: springannotations

解决方案


好的,下面是从源代码级别如何@Controller/工作的高级概述。@RestController希望能给你一些方向。详情请参考相关源代码

  1. RequestMappingHandlerMappingbean 初始化(即afterPropertiesSet()调用)时,它将找出所有带有@Controller/注释的 bean @RestController。使用反射从这些 bean 中提取有用的元数据并将它们存储在它的MappingRegistry

  2. 收到a 时HttpServletRequest,调用RequestMappingHandlerMapping#lookupHandlerMethod()以找出HandlerMethod可以处理此问题HttpServletRequestMappingRegistry.

  3. RequestMappingHandlerAdapter#handleInternal()调用匹配HandlerMethod,最后使用反射来实际调用@Controller/上的方法@RestController


推荐阅读