3 回答

TA貢獻1839條經驗 獲得超15個贊
這是Spring 在啟動時所做的事情的簡化視圖:
// Create bean: sampleService2
SampleService2 sampleService2 = new SampleService2();
// Create bean: sampleController2
SampleController2 sampleController2 = new SampleController2();
sampleController2.sampleservice2 = sampleService2; // because @Autowired
// Create bean: sampleController3
SampleController3 sampleController3 = new SampleController3();
sampleController3.sampleservice2 = sampleService2; // because @Autowired
如您所見,單例 beansampleService2自動裝配到sampleController2和 中sampleController3。
這些 bean 被添加到存儲庫中,因此您可以在以后的任何時間點按名稱或類型查找它們。

TA貢獻1821條經驗 獲得超6個贊
默認情況下,正如您提到的,所有 Spring bean 都是單例,但您的第二個假設是錯誤的:同一個 bean 可以在許多其他 bean 中自動裝配。
事實上,這就是他們成為單身人士的全部意義所在。
這也意味著兩個不同的線程確實可以改變同一個 bean 的狀態。出于這個原因,您大部分時間都希望保持您的 bean 無狀態。
如果您真的需要為每個自動裝配的位置擁有一個不同的 bean 實例,您可以將該 bean 的范圍更改為prototype
. 請參閱Spring bean 范圍文檔。
添加回答
舉報