3 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊
是的,這是Spring的默認(rèn)行為。在應(yīng)用程序啟動時@Component
,無論是否使用它們,都將創(chuàng)建帶有注釋的所有Bean 。
applicationContext.getBean(ParentB.class)
然后,該調(diào)用僅返回已創(chuàng)建的Bean。
要回答您的編輯: 默認(rèn)情況下,Spring Bean是Singletons,因此,每個總是只有一個Bean實(shí)例applicationContext
。這是Control Inversion,這意味著Spring處理對象實(shí)例化,而不是您。
具有Prototype范圍的Bean可以具有多個對象實(shí)例,并且可以由您實(shí)例化。(通過致電applicationContext.getBean(ParentA.class)
)。這類似于做類似的事情ParentA a = new ParentA()
。
我建議您閱讀此書,以更深入地了解范圍。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個贊
為什么會這樣呢?
當(dāng)您啟動Spring應(yīng)用程序時,ApplicationContext
將通過組件掃描您的應(yīng)用程序并在上下文中注冊所有帶Spring注釋的bean進(jìn)行初始化。這樣可以根據(jù)需要注入它們。
這是Spring的默認(rèn)行為嗎?
是的。您可以通過將組件掃描配置為僅根據(jù)需要查看指定的軟件包來更改此行為(盡管此用例很少且相差很遠(yuǎn))。
添加回答
舉報