簡體   English   中英

假設 Spring 控制器參數已實例化,但它是何時/何地實例化的?

[英]Spring controller parameter is being assumed instantiated but when/where was it instantiated?

Thymeleaf 教程代碼

這個 SeedStarter 如何被實例化? 看到方法體顯示了與對象 SeedStarter 的交互......那么它首先是如何被實例化的?

由於這個項目是一個教程,我將摘錄我尋找答案的確切位置。 我目前不知道可以通過以下任何其他方式創建此“來賓”對象,除非: 1. 它之前已創建並添加到模型中。 (控制器中沒有 init 則可能沒有添加到其他地方的模型中) 2. 已經創建的控制器的私有成員。

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

        return "seedstartermng";
    }

控制器:

@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 成功匹配控制器方法后,在實際調用它之前,它將根據參數類型及其注釋解析方法參數。 您可以從該表中找到所有支持的類型、注釋和解析規則。

在您的情況下,由於SeedStarter上沒有任何注釋並且其類型不是受支持的類型,因此它將回退到默認值,就像在其上注釋了@ModelAttribute一樣。 (由該表中的最后一條規則提及)。 @ModelAttribute 文檔中,它將實例化SeedStarter如下:

  • 如果已使用模型添加,則來自模型。
  • 使用@SessionAttributes 從 HTTP 會話中獲取。
  • 從通過 Converter 傳遞的 URI 路徑變量(參見下一個示例)。
  • 從調用默認構造函數。
  • 來自具有與 Servlet 請求參數匹配的參數的“主構造函數”的調用。 參數名稱通過 JavaBeans @ConstructorProperties 或通過字節碼中運行時保留的參數名稱確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM