Spring中的哪些模块和类负责注释的实现

时间:2018-12-28 01:23:57

标签: spring annotations

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

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

1 个答案:

答案 0 :(得分:0)

好的,下面是@Controller / @RestController在源代码级别的工作方式的高级概述。希望能给您一些指导。有关详细信息,请参阅相关的source codes

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

  2. 当收到HttpServletRequest时,调用RequestMappingHandlerMapping#lookupHandlerMethod()找出哪个HandlerMethod可以处理来自HttpServletRequest的{​​{1}}。

  3. MappingRegistry调用匹配的RequestMappingHandlerAdapter#handleInternal(),最后使用反射在HandlerMethod / @Controller

  4. 上实际调用该方法。