spring - Spring中哪些模块和类负责Annotations的实现
问题描述
Spring 支持各种注解,其中库/模块/类/模式处理注解逻辑。spring 为@Controller、@RestController 实现注解行为... 示例:要添加新的自定义注解,我们添加 at-sign (@) 然后使用 Java 反射处理内容。那么在 Spring Framework 中,他们是如何做到这一点的,以及 Spring 在升级他们的注解版本时如何修改逻辑?
@PostConstruct 和@PreDestroy 是类InitDestroyAnnotationBeanPostProcessor 的句柄,所以@RestController 是哪个类句柄。我想了解@RestController 的spring 实现方式,因为我想添加一个新注释,其中包括@RestController 和我的额外逻辑。
解决方案
好的,下面是从源代码级别如何@Controller
/工作的高级概述。@RestController
希望能给你一些方向。详情请参考相关源代码。
当
RequestMappingHandlerMapping
bean 初始化(即afterPropertiesSet()
调用)时,它将找出所有带有@Controller
/注释的 bean@RestController
。使用反射从这些 bean 中提取有用的元数据并将它们存储在它的MappingRegistry
收到a 时
HttpServletRequest
,调用RequestMappingHandlerMapping#lookupHandlerMethod()
以找出HandlerMethod
可以处理此问题HttpServletRequest
的MappingRegistry
.RequestMappingHandlerAdapter#handleInternal()
调用匹配HandlerMethod
,最后使用反射来实际调用@Controller
/上的方法@RestController
推荐阅读
- java - Java:替换集合类型字段的空值空集合
- mysql - 如果两个或多个用户在 mysql 中为同一个表发送插入查询会发生什么?
- python - 如何规范化 1 到 10 之间的数组?
- hibernate - Spring Boot 通用 DAO
- angular - 作为@Input 传递给子级的值的双向绑定
- java - 尝试在回收站视图中显示用户信息 - Firebase
- python - 如何根据生成的随机问题“选择”正确的用户答案
- java - 从类扩展时,何时在方法中使用 super 或 override?
- python - 如何使用 scikit-learn 可视化两个类的边界/决策函数
- javascript - Microsoft Translate Voice 请求时限制 200-400 字