2015-09-03 67 views
2

我在學習Spring,據我所知,當我們對具有通用名稱(不是setter方法)的方法使用@annotation時,則方法的參數是自動裝配的。@autowired在春天的方法

public class MovieRecommender { 

    private MovieCatalog movieCatalog; 

    private CustomerPreferenceDao customerPreferenceDao; 

    @Autowired 
    public void prepare(MovieCatalog mC, 
      CustomerPreferenceDao cPD) { 
     this.movieCatalog = mC; 
     this.customerPreferenceDao = cPD; 
    } 

    // ... 

} 

所以,在這裏,田野movieCatalog一個customerPreferenceDao被自動裝配與三菱商事 CPD 值。我不明白的是,如果沒有「@ autowired」,這與方法不同。

我知道@autowired應用於字段名稱,但無法理解值何時顯式傳遞給方法(setter或任何其他方法),那麼Spring會做什麼特別的?

+0

@Autowired只能用於「構造函數,字段,設置方法或配置方法」。有關詳細信息,請參見[此答案](http://stackoverflow.com/a/3746611/2747533)。 – MirMasej

+0

http://stackoverflow.com/questions/19414734/understanding-spring-autowired-usage可能的重複 –

回答

0

@autowired的方法用於setter-injection。除了bean不依賴於彈簧容器外,它與字段注入沒有區別,你也可以自己實例化和連接它。

使用它的一個原因是如果你有循環依賴。

setter注入的另一個用途是它允許在稍後的時間(JMX)重新注入(可能是可選的)依賴項。

-2
public class MovieRecommender { 

    @Autowired 
    private MovieCatalog movieCatalog; 

    @Autowired 
    private CustomerPreferenceDao customerPreferenceDao; 

} 

現在你不需要準備方法!

1

比較晚的答案,但在這裏它是:

@Autowired註解的任何方法是一種配置方法。它在完成字段注入後調用bean實例化。該方法的參數被注入到調用方法中。