Spring支持各种注释,其中库/模块/类/模式处理注释逻辑。 春天实现@Controller,@RestController的注释行为... 示例:要添加新的自定义批注,我们添加符号(@),然后使用Java反射来处理内容。那么在Spring Framework中,他们如何做到这一点以及Spring在升级其注释版本时如何修改逻辑?
@PostConstruct和@PreDestroy是InitDestroyAnnotationBeanPostProcessor类的句柄,因此@RestController是哪个类的句柄。我想了解@RestController的spring实现方式,因为我想添加一个新的批注,其中包括@RestController和我的额外逻辑。
答案 0 :(得分:0)
好的,下面是@Controller
/ @RestController
在源代码级别的工作方式的高级概述。希望能给您一些指导。有关详细信息,请参阅相关的source codes。
RequestMappingHandlerMapping
bean初始化时(即afterPropertiesSet()
调用),它将找出所有用@Controller
/ @RestController
注释的bean。使用反射从这些bean中提取有用的元数据,并将其存储在其MappingRegistry
当收到HttpServletRequest
时,调用RequestMappingHandlerMapping#lookupHandlerMethod()
找出哪个HandlerMethod
可以处理来自HttpServletRequest
的{{1}}。
MappingRegistry
调用匹配的RequestMappingHandlerAdapter#handleInternal()
,最后使用反射在HandlerMethod
/ @Controller