gpt4 book ai didi

java - 假定 Spring Controller 参数已实例化,但它是在何时/何处实例化的?

转载 作者:行者123 更新时间:2023-12-02 01:26:57 25 4
gpt4 key购买 nike

Thymeleaf tutorial code

这个 SeedStarter 是如何实例化的?请参阅方法主体显示与对象 SeedStarter 的交互。那么它首先是如何实例化的?

由于这个项目是一个教程,我将摘录我寻找答案的确切位置。我目前不知道除了以下情况之外可以创建此“ guest ”对象的任何其他方式:1. 它是先前创建并添加到模型中的。 ( Controller 中没有初始化,则可能不会添加到其他地方的模型中)2. 已创建的 Controller 的私有(private)成员。

@RequestMapping({"/","/seedstartermng"})
public String showSeedstarters(final SeedStarter seedStarter) {
seedStarter.setDatePlanted(Calendar.getInstance().getTime());

return "seedstartermng";
}

Controller :

@Controller
public class SeedStarterMngController {


@Autowired
private VarietyService varietyService;

@Autowired
private SeedStarterService seedStarterService;



public SeedStarterMngController() {
super();
}



@ModelAttribute("allTypes")
public List<Type> populateTypes() {
return Arrays.asList(Type.ALL);
}

@ModelAttribute("allFeatures")
public List<Feature> populateFeatures() {
return Arrays.asList(Feature.ALL);
}

@ModelAttribute("allVarieties")
public List<Variety> populateVarieties() {
return this.varietyService.findAll();
}

@ModelAttribute("allSeedStarters")
public List<SeedStarter> populateSeedStarters() {
return this.seedStarterService.findAll();
}



@RequestMapping({"/","/seedstartermng"})
public String showSeedstarters(final SeedStarter seedStarter) {
seedStarter.setDatePlanted(Calendar.getInstance().getTime());
return "seedstartermng";
}

最佳答案

Spring MVC 成功匹配 Controller 方法后,在实际调用该方法之前,会根据参数类型及其注释解析方法参数。你可以从这个table找到所有支持的类型、注解和解析规则。 .

在您的情况下,由于 SeedStarter 上没有任何注释,并且其类型不是受支持的类型,因此它将回退到默认值,就像 @ModelAttribute 一样对其进行了注释。 (该表中的最后一条规则提到)。以及来自 @ModelAttribute docs ,它将实例化 SeedStarter 如下:

  • From the model if already added by using Model.
  • From the HTTP session by using @SessionAttributes.
  • From a URI path variable passed through a Converter (see the next example).
  • From the invocation of a default constructor.
  • From the invocation of a “primary constructor” with arguments that match to Servlet request parameters. Argument names are determined through JavaBeans @ConstructorProperties or through runtime-retained parameter names in the bytecode.

关于java - 假定 Spring Controller 参数已实例化,但它是在何时/何处实例化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56763517/

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