2012-02-13 47 views
2

將一大堆@Autowired bean放入超類中是否有任何缺點,這些超類沒有在該類中使用,而是在擴展超類的子類中使用類?自動裝配超類中的Spring beans被許多小類所延伸

+0

*你認爲什麼是缺點?你*看到一個缺點? – 2012-02-13 21:08:39

+0

Downside =額外的內存使用量,速度下降等等。不,我真的沒有看到任何缺點 - 我只是好奇,看看是否有其他人遇到過任何東西。 – woolyninja 2012-02-13 21:17:50

+0

我會說沒有任何的功能缺點,但有些人可能不喜歡一個擁有x個成員的類,只是爲了讓他們可以通過子類進行訪問。 – 2012-02-13 21:23:50

回答

5

不,沒有缺點。

只要確保你不使用自動佈線的構造函數,因爲它很快就會成爲一種痛苦來支持它們。

3

您的代碼看起來很醜,春季啓動可能需要幾毫秒的時間,當然這個字段需要更多的內存(Java需要的字段)。但除此之外,我不會期望任何問題。

而對於「正常」運行應該沒有影響(除內存)

我認爲可以說10到30場讓說高達10和豆類。如果你有TON的領域,比做一個測試並測量內存和性能的影響。

0

一如既往,這取決於。如果你所有的bean都是單身職位,那麼這不應該成爲一個問題,這是「官方派對」。

如果你的bean被請求作用域(比如一個控制器類),你可能會有比你意識到的更大的問題。也許有些依賴關係也不是單身人士?由於您正在構建依賴關係及其依賴關係等,因此可以輕鬆地爲請求作用域控制器類的每個實例化構建500個bean。

現在由於bean的實例化速度與春季的冰川一樣緩慢,所以確實存在問題。春季框架的官方派對似乎是忽略了這個問題,因爲我相信@Bozho會在這個迴應的評論中強烈辯護。所有這些顯然是因爲「網絡示波器」在2.0版的現有設計中被重新安裝,並且由於支持的大量用例,這完全是在現有實施的前提下完成的。

解決的方法當然是規範化你的依賴關係;不要把它們都放在基類中。如果你很懶,你可以在ApplicationContext中進行連接,並在需要時爲每個服務使用顯式調用getBean。當然,這與春天的任何設計準則完全相反。