2011-06-02 67 views
3

我們正在開發基於Spring 3.0.5的基於Web MVC的應用程序。在我們的代碼中,我們經常這樣做:Spring Web MVC和新的bean

@ModelAttribute(ModelKeys.SOME_BEAN) 
public SomeBean newSomeBean() { 
    return new SomeBean(); 
} 

我認爲這不是必需的。但如果真的沒有,那麼我想知道這是如何設法通過這麼多的代碼評論?在我的理解中,如果一個控制器方法需要一個NEW SomeBean,那麼使用@ModelAttribute在該方法中註釋一個參數應該足夠了?那麼Spring會使用默認的構造函數來新建立所需的bean用於調用控制器的方法,如:

@RequestMapping(method = RequestMethod.POST) 
public String doIt(
    @ModelAttribute(ModelKeys.SOME_BEAN) final SomeBean bean, 
    final BindingResult bindingResult) 
{ 
    ... 
} 

這裏,春天不會新興起來的SomeBean的實例,並嘗試將數據綁定到它從發佈的數據, 對?沒有必要像第一個代碼片段中所示的方法?請你確認一下,或者給我提供你的想法?如果我只是繼續前進並刪除所有這些除了新建空白bean之外什麼都不做的方法,我是否會冒風險?

+1

是否有可能當前代碼的工作方式是在早期版本的spring 2.5.6中正確建立的,現在使用spring 3.0.5還有更簡潔的新方法一樣的東西?在這種情況下,我可以想到很多例子,但在這個特例中我並不積極。 – Kevin 2011-06-02 14:08:43

+0

是的,其實很可能。我在其他各個領域也看到很多舊的做法。很可能這種代碼在Spring的早期版本中是必需的...... – 2011-06-02 17:13:27

回答

2

@ModelAttribute註釋方法不會將bean屬性與HTTP請求參數綁定。這是與方法參數上的相同註釋的主要區別。這種方法有助於填充某些不依賴於模型中的請求參數的數據,例如從字典中提取組合框的值。如果您在控制器中有多個處理程序方法,這是特別有用的,例如查看/更改/刪除相同類型的對象,並且在所有對象中都需要相同的一組模型屬性。

+0

我終於找到了答案。我想我現在明白了爲什麼我們要做我們所做的 - 我也看了一下spring mvc源代碼。 – 2011-06-29 11:07:45