5 回答

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
這個(gè)鏈接在這里解釋了在注釋的情況下的組件掃描。在您的情況下,您已通過(guò) XML 配置了組件掃描。spring 中的每個(gè) XML 定義都有其對(duì)應(yīng)的注解定義。盡管此鏈接解釋了通過(guò)注釋配置組件掃描的情況,但它在您的情況下也完全有效:

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
如果 spring 容器知道 bean 位于不同的包中,則這些 bean 位于不同的包中這一事實(shí)并不重要。通過(guò)在兩個(gè)包中啟用組件掃描,您可以在應(yīng)用程序的當(dāng)前執(zhí)行上下文中全局使用這兩個(gè)包中的所有 bean。
您可以將 spring IoC 視為全局映射,給定一個(gè)(先前注冊(cè)的)鍵,它可以為您提供與該鍵相關(guān)的實(shí)例。

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
當(dāng)您提到組件掃描包時(shí),它表示spring-container 在這些包中找到帶注釋的類(lèi),然后bean(具有@Component 或相關(guān)注釋的類(lèi)的對(duì)象,如@Service、@Controller、@Repository)將是由 Spring 管理(從創(chuàng)建到銷(xiāo)毀的整個(gè)生命周期)。因此,在您的應(yīng)用程序中,無(wú)論何時(shí)您需要一個(gè)這樣的 bean,而不是創(chuàng)建,它將由容器提供。另一方面,如果您沒(méi)有指定“組件掃描”,您將必須確定您希望 Spring-container 管理其 bean 的類(lèi)(使用 xml 或 javaConfig)。現(xiàn)在這部分是確定哪些 bean 將由 Spring-container 管理。
接下來(lái)是在需要的地方連接這些 bean。為此,您在 setter 方法中提到了 @Autowired。當(dāng) Spring-container 遇到這個(gè)注解時(shí),它會(huì)在容器中尋找那個(gè) bean(在你的例子中是服務(wù) bean)。由于該 bean 由容器管理(來(lái)自上一步)并且在需要時(shí)可用(在您的情況下在控制器類(lèi)中),容器將提供(自動(dòng)連接)服務(wù) bean 到 setter 方法中。
添加回答
舉報(bào)