2010-11-10 17 views
13

我正在使用Spring 3.0.x和我的項目。 我與@Autowired當前實踐示例如下:我應該爲@Autowired提供一個setter嗎?

 

@Autowired 
private SomeType someMemberVariable; 
 

是對使用一個setter方法的更好和/或優選的?通過二傳手,我指的是以下幾點:

 

private SomeType someMemberVariable; 

@Autowired 
private void setSomeMemberVariable(SomeType newValue) 
{ 
    someMemberVariable = newValue; 
} 
 

我明白可變VS不變的制定者,這是超出範圍了這個問題。

回答

15

我在使用@Autowired時沒有使用setter - 它添加了樣板代碼。

每當我需要在單元測試中設置依賴關係時,我使用ReflectionTestUtils.setField(..) - 它不像編譯器那樣安全,但我沒有太多麻煩。

一點題外話,如果用彈簧3.0,就可以開始使用的,而不是@Inject@Autowired

+1

我懷疑@Inject僅適用於Java的6.0及更高版本。如果仍然使用Java 5.0(也許是因爲您使用的是WAS 6.1),那麼@Autowired就是要走的路。 – DwB 2010-11-11 14:04:46

+0

@Inject會在類路徑上有效。你可以從這裏得到它https://code.google.com/p/atinject/我在tomcat上使用它。 – Bozho 2010-11-11 14:06:54

+0

爲什麼'@Inject'通過'@ Autowired'?任何參考? – DerekY 2016-01-12 05:51:58

16

我更喜歡使用setter和getters,因爲它允許您在Spring環境中運行對象(即在單元測試中設置mocks)時手動連接對象。

相關問題