Java注释如何在Spring框架中工作
当我使用Spring框架时,我使用Java注释将类标记为控制器,使用@RequestMapping()的方法等等。我搞不清楚是哪个班读了这些讲义,使用了什么技巧。我在考虑Java反射。是吗?是的,Spring使用Java反射来评估您在注释中提供的信息,并负责正确的配置。对于Java注释如何在Spring框架中工作,java,spring,annotations,Java,Spring,Annotations,当我使用Spring框架时,我使用Java注释将类标记为控制器,使用@RequestMapping()的方法等等。我搞不清楚是哪个班读了这些讲义,使用了什么技巧。我在考虑Java反射。是吗?是的,Spring使用Java反射来评估您在注释中提供的信息,并负责正确的配置。对于@RequestMappingspringmvc和springwebflux,它们都支持此注释(请参阅) 摘录: SpringMVC和SpringWebFlux都通过各自模块和包结构中的RequestMappingHandle
@RequestMapping
springmvc和springwebflux,它们都支持此注释(请参阅)
摘录:
SpringMVC和SpringWebFlux都通过各自模块和包结构中的RequestMappingHandlerMapping和RequestMappingHandlerAdapter支持此注释
是的,也不是,Spring当然使用反射来使用注释中的数据,但真正的魔法是HandlerMapping和HandlerAdapter的角色,它们提供url和控制器的映射(HandlerMapping),并根据控制器方法调整特定的servlet请求和响应。在partucular中,如果您使用@EnableWebMvc或,您会在spring boot应用程序或lagacy spring应用程序中自动注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter。这些是通过反射给你的心灵带来魔力的豆子。即使我建议使用函数式编程中声明的端点,它也可以在SpringWebFlux中工作。简言之,Spring有一个称为BeanPostProcessor的概念,它负责(隐式或显式地)处理注释或对SpringBean的任何工作/修改 spring框架支持许多注释,一些注释仅用于web,其他注释用于缓存或调度,spring本身由许多在不同领域提供帮助的框架组成 当加载应用程序上下文时,这些bean后处理器也会被spring识别(从技术上讲,它们与其他spring bean一样,但因为它们实现了
org.springframework.beans.factory.config.BeanPostProcessor
interface spring对它们的处理方式不同,尽管它也将它们放在应用程序上下文中
因此,为每个bean调用这些BPP,并允许修改bean
通常,每个BPP执行以下操作之一:
- 将初始bean包装到代理中以提供附加功能。代理通常使用
或java.lang.reflect.proxy
完成。或者在一些bean后处理器中,使用对spring aop的编程访问来实现相同的效果。因为代理不是为每个bean创建的,所以bean应该是“已分析”,并且只有当bean或其方法上出现某些注释时,bean才由BPP处理。此分析由每个bean后处理器完成cglib
- 修改Bean,设置其依赖项,等等。例如,
就是这样工作的@Autowired
- 仅因为bean包含注释而部署其他代码,例如,如果您放置
注释,spring将创建一个计时器,该计时器将在不同的线程中定期调用标记有此注释的方法@Scheduled
您可以在spring文档或注释是将元数据与带下划线的框架提取的类相关联的方法中了解更多信息是的,spring使用反射查找类和方法上的所有注释并相应地采取行动。@jbnize您不知道类名,我有克隆spring源代码要研究,但是我找不到这个类。不,可能有很多:例如,核心模块不处理特定于web的内容。如果你想了解注释是如何工作的,最好阅读注释教程,而不是试图理解Spring是如何使用它们的。