gpt4 book ai didi

java - Spring MVC @Controller 的处理程序方法的参数如何在运行时自动解析?

转载 作者:行者123 更新时间:2023-12-05 06:53:17 25 4
gpt4 key购买 nike

DispatcherServlet(或任何其他支持 Spring MVC 基础结构的 bean)如何动态地解析 @Component 实例的处理程序方法的签名,以及如何它是否知道在该方法中需要什么参数/类型,以什么顺序?

如果我有一个“@RequestMapping-ed”处理程序方法,在我的@Controller 实例中,定义其签名的任何版本:

public String f() {...}

public String f(Model model) {...}

public String f(HttpServletRequest, Model model) {...}

public String f(Model model, HttpServletRequest) {...}

public String f(SomeEntity se, Model model, HttpServletRequest, AnotherModel am) {...}

//so on..

不管参数的数量、类型和顺序都可以正常工作,这些参数最终会提供相应的参数,再次忽略它们的数量、顺序和类型。

下面应该有很多工作要做,以正确实例化预期的参数,以正确的顺序传递它们,如果需要,甚至可能进行一些类型转换......等等,但我不掌握这个的基本原理。

我在spring-webmvc模块中查找了相应的源码,以及DispatcherServlet的源码;然而,还没有完全掌握底层机制。

我可以猜到,可能会涉及一些 BeanPostProcessor.. 进行反射访问等等.. 但即使在这种情况下,因为我不确定发生了什么,我会非常感谢任何有值(value)的输入。

最佳答案

在 Spring MVC 中,HandlerMapping 有三种实现:BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping 和 ControllerClassNameHandlerMapping。您可以在此处阅读有关此主题的更多信息: https://www.baeldung.com/spring-handler-mappings

关于java - Spring MVC @Controller 的处理程序方法的参数如何在运行时自动解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65816943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com