簡體   English   中英

Spring MVC,我的bean如何在控制器中自動接線?

[英]spring mvc, how do my beans get autowired in controller?

我是Spring和Spring MVC的新手。 我已經按照視頻教程配置了dataSource和mvc。 我添加了一個上下文文件offers-servlet.xmlWEB-INF在那里我掃描我的controllers封裝在我的controller.java所在。 我創建了另一個上下文service-context.xml ,其中我是組件掃描service.java類。 我正在用setService方法在我的controller.java創建service.java的實例, setService方法用@Autowired注釋。 我的疑問是, service.java如何自動連接到我的controller.java ,其中的每一個都位於不同的包中,並且具有不同的component-scan的不同context.xml文件。

這里的鏈接說明了注釋情況下的組件掃描。 在您的情況下,您已經配置了通過XML進行組件掃描。 Spring中的每個XML定義都有其對應的注釋定義。 盡管此鏈接示例了通過注釋配置組件掃描的情況,但在您的情況下它也完全有效:

如何了解Spring @ComponentScan

如果彈簧容器知道這些豆位於不同包裝中的事實並不重要。 通過在兩個軟件包中啟用組件掃描,可以在應用程序的當前執行上下文中全局使兩個軟件包中的所有bean可用。

您可以將spring IoC視為一個全局映射,給定一個(先前注冊的)密鑰,它可以為您提供與該密鑰相關的實例。

當您提到組件掃描程序包時,它指示彈簧容器在那些提到的程序包中找到帶注釋的類,然后將Bean(具有@Component或相關注釋(如@ Service,@ Controller,@ Repository)的類的對象)由Spring管理(從創建到破壞的整個生命周期)。 因此,在您的應用程序中,只要您需要一個這樣的bean(而不是創建一個),它將由容器提供。 另一方面,如果您未指定'component-scan',則必須標識要使用Spring容器管理其bean的類(使用xml或javaConfig)。 現在,這一部分正在確定哪些容器將由Spring容器管理。

接下來是在需要的地方布線這些bean。 為此,您在設置方法上提到了@Autowired。 當Spring容器遇到此注釋時,它將在容器中查找該bean(在您的情況下為service bean)。 由於該bean由容器管理(來自上一步),並且在需要時可用(在您的情況下為控制器類),因此容器會將服務bean提供(自動裝配)到setter方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM