これは、すべてが今どのように見えるかです:
@SessionAttributes("shoppingCart")
public class ItemController {
@ModelAttribute
public ShoppingCart createShoppingCart() {
return new ShoppingCart();
}
@RequestMapping(value=RequestMappings.ADD_TO_CART + RequestMappings.PARAM_ITEM_ID, method=RequestMethod.GET)
public String addToCart(@PathVariable("itemId") Item item, @ModelAttribute ShoppingCart shoppingCart) {
if(item != null) {
shoppingCartService.addItem(shoppingCart, item);
}
return ViewNamesHolder.SHOPPING_CART;
}
}
addToCart メソッドが初めて呼び出されると、shoppingCart オブジェクトは createShoppingCart メソッドによって初期化されます。addToCart メソッドの実行後、初期化されたオブジェクトがセッションに追加され、後で使用するためにセッションから使用されます。つまり、createShoppingCart メソッドは (セッションから削除されない限り) 1 回だけ呼び出されます。
必要なときにいつでもこのオブジェクトを作成するだけで、Spring が ModelAttribute アノテーション付き初期化メソッドの必要性を排除するのはなぜですか? 次に、すべてが次のように単純になります。
@SessionAttributes("shoppingCart")
public class ItemController {
@RequestMapping(value=RequestMappings.ADD_TO_CART + RequestMappings.PARAM_ITEM_ID, method=RequestMethod.GET)
public String addToCart(@PathVariable("itemId") Item item, @ModelAttribute ShoppingCart shoppingCart) {
if(item != null) {
shoppingCartService.addItem(shoppingCart, item);
}
return ViewNamesHolder.SHOPPING_CART;
}
}
セッションで shoppingCart オブジェクトが見つからない場合は常に、デフォルトのコンストラクターによって初期化されます。その理由は何だと思いますか?